6

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

TypeScript:使类仅在模块内可见

除了我正在扩展私人课程。VS2012 在我面前抛出一个警告: exported class MyExportedClass extends private class 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);
        }        
    }
}

我的理解是否正确,这是不可能的?

4

1 回答 1

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 = {}));

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

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

于 2012-12-14T04:14:07.523 回答