6

私はこの質問と非常によく似たことをしています:

TypeScript: モジュール内のみでクラスを可視にする

私がプライベートクラスを拡張していることを除いて。VS2012 は私の顔に警告をスローします: エクスポートされたクラス 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 に答える