TypeScript:Public类扩展了一个私有类:不可能?

Óla*_*son 6 typescript

我正在做一些与这个问题非常相似的事情:

TypeScript:使类仅在模块内可见

除了我正在扩展私人课程.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);
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解这是不可能的吗?

Ste*_*man 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 = {}));
Run Code Online (Sandbox Code Playgroud)

这并不意味着生成的代码不起作用,但我的期望是该类对模块内的任何人都可见,并且考虑到模块可以跨越多个文件,这实际上是不可能的。

他们不允许这样做的主要原因很可能是因为不断升级的代码可见性的概念问题,但我确实想指出还有一个微妙的技术陷阱。