12

次のコードを見てください。

module MyModule {
    class MyPrivateClass {
        ...
    }

    export class MyPublicClass {
        private var: MyPrivateClass; // MyPrivateClass is unknown
    }
}

MyPrivateClassをMyModule内でのみ、特にMyPublicClassで内部的に使用できるようにしたいMyModuleの外では、 MyPublicClassのみが表示されます。上記のレイアウトでよいと思いましたが、VS はMyPrivateClassがMyPublicClass内に表示されないと不平を言います。MyPrivateClassの定義の前に export を追加すると、 MyPublicClassから見えるようになりますが、外部からも見えるようになります。

MyPublicClassのみに表示する方法はありますか?

ありがとうございました。

4

4 に答える 4

7

これは、プライベート クラス (パブリック クラス) が、パブリック クラスのプライベート クラスを使用し、エラーを生成するプライベート クラスを使用しようとする実際の例です。

それでもエラーが発生する場合、問題の原因となっているモジュールに使用しようとしている名前を開示できますか?

module MyModule {
    class MyPrivateClass {
        doSomething() {
            return 1;
        }
    }

    export class MyPublicClass {
        private x = new MyPrivateClass();

        someFunction() {
            return this.x.doSomething();
        }
    }
}

var examplePublic = new MyModule.MyPublicClass();
var result = examplePublic.someFunction(); // 1

var examplePrivate = new MyModule.MyPrivateClass(); // error
于 2012-10-12T16:32:08.747 に答える
2

エミットされた JavaScript でプライベートにしたい場合は、プライベート クラス インスタンスをモジュール内に移動することで実行できますが、エクスポートされたクラスの側ではありません。

module MyModule {
    class MyPrivateClass {
        prop1: number = 1;
    }

    var foo: MyPrivateClass = new MyPrivateClass();

    export class MyPublicClass {
        someMethod(){
            var bar = foo.prop1;
        }
    }
}

var x = new MyModule.MyPublicClass();
于 2013-01-03T16:39:55.220 に答える
0

あなたはコメントの 1 つで次のように述べています。

奇妙なことに、上記のコード (あなたまたは私のもの) を貼り付ければ問題ありません。しかし、モジュールの名前を実際の名前に変更するとすぐに、説明したエラーが表示されます

これは、私が経験した問題と非常によく似ています。モジュールをインポートするためにさまざまな参照パスを使用していたことが原因でした。その結果、モジュール メンバー内で相互にアクセスできませんでした。

申し訳ありませんが、これ以上の詳細を思い出せず、あなたの (または私の) エラーを再現できませんでした。これはおそらく役に立たないかもしれませんが、それでも私の経験を共有したいと思いました.参照パスとモジュールを混在させると、非常に奇妙なエラーが発生するようです.

さらに、VisualStudio の動作がおかしくなることがあります。私は現在、友人と一緒に typescript プロジェクトに取り組んでいます。コードは github リポジトリに保存されます。両方とも同じバージョンをプルしました。私はうまく機能し、彼にはエラーメッセージが散りばめられました。同じ OS、同じバージョンの Typescript、同じバージョンの VisualStudio、... 興味深いことに、エラーはモジュールにも関連していました。インポートされたモジュールが「空」のように見えました。このモジュールのコンテンツを使用しようとしたすべてのコードは赤でマークされました。彼が VisualStudio を再起動すると、突然、コードが有効であると認められました。何も変更していません。コンパイルも問題なくできました。

于 2013-01-19T12:15:53.093 に答える
0

うーん、問題はありませんが、フィールド値を初期化することを忘れないでください。そうしないと、コンパイラはフィールドを生成しません。

module MyModule {
    class MyPrivateClass {

    }

    export class MyPublicClass {
        private instance: MyPrivateClass; // MyPrivateClass is unknown
        constructor() {
           this.instance = new MyPrivateClass();
        }
    }
}
于 2012-10-08T12:40:26.217 に答える