我正在做一些与这个问题非常相似的事情:
TypeScript: make class visible inside module only
除了我正在扩展私人课程。 VS2012在我脸上发出警告: 导出的类MyExportedClass扩展了私有类MyPrivateClass
我的代码如下所示:
module MyModule {
class MyPrivateClass {
constructor(public name: string) {
}
getName() {
return this.name;
}
}
export class MyExportedClass extends MyPrivateClass { // Error: exported class MyExportedClass extends private classMyPrivateClass
constructor(name: string) {
super(name);
}
}
}
我理解这是不可能的吗?
答案 0 :(得分:4)
这是不可能的,因为它允许模块外的任何人调用你的私人类的成员。如果允许的话,你基本上会升级类的可见性。
如果您查看他们生成的代码,您会发现私有类字体在文件外部不可见,因为它们不会使其成为MyModule的成员:
(function (MyModule) {
var MyPrivateClass = (function () {
function MyPrivateClass(name) {
this.name = name;
}
MyPrivateClass.prototype.getName = function () {
return this.name;
};
return MyPrivateClass;
})();
var MyExportedClass = (function (_super) {
__extends(MyExportedClass, _super);
function MyExportedClass(name) {
_super.call(this, name);
}
return MyExportedClass;
})(MyPrivateClass);
MyModule.MyExportedClass = MyExportedClass;
})(MyModule || (MyModule = {}));
这并不意味着生成的代码不会起作用,但我的期望是该模块中的任何人都可以看到该类,并且假设模块可以跨越多个文件,而这些文件实际上并非如此。可能。
他们不允许这样做的主要原因很可能是因为代码可见性不断升级的概念问题,但我确实想指出那里还有一个微妙的技术问题。