Typescript をいじっているときに、モジュール内のクラス (名前空間として使用) は、その前にキーワードを記述しない限り、他のクラスから使用できないことに気付きました。export
たとえば、次のようになります。
module some.namespace.here
{
export class SomeClass{..}
}
上記のコードを次のように使用できるようになりました。
var someVar = new some.namespace.here.SomeClass();
しかし、メソッド レベルで使用されるキーワードではなく、メソッドまたはプロパティが外部からアクセス可能であることを示すキーワードを使用する理由が気になりましたpublic
。では、クラスやインターフェイスなどを外部から表示できるようにするために、この同じメカニズムを使用しないのはなぜでしょうか?
結果のコードは次のようになります。
module some.namespace.here
{
public class SomeClass{..}
}
ベストアンサー1
主な理由は、それがexport
ECMAScript の計画と一致しているからです。「"public" ではなく "export" を使うべきだった」と主張することもできますが、"export/private/protected" がアクセス修飾子の不一致なセットであることは別として、この 2 つの間には微妙な違いがあり、それがこのことの原因になっていると私は考えています。
TypeScript では、クラス メンバーをpublic
またはとしてマークしてprivate
も、生成された JavaScript には影響しません。これは、TypeScript コードがアクセスすべきでない項目にアクセスするのを防ぐために使用できる、単なる設計/コンパイル時のツールです。
キーワードを使用するとexport
、JavaScript はエクスポートされたアイテムをモジュールに追加する行を追加します。例では次のようになりますhere.SomeClass = SomeClass;
。
public
したがって、概念的には、とによって制御される可視性はprivate
ツールのみを対象としており、export
キーワードは出力を変更します。