1. ホーム
  2. typescript

[解決済み] Typescript はなぜ "export" というキーワードを使って、クラスやインターフェースを公開するのでしょうか?

2022-05-08 05:37:34

質問

Typescript に手を出しているときに、モジュール内のクラス(名前空間として使用される)が export というように、キーワードを前にしています。

module some.namespace.here
{
   export class SomeClass{..}
}

というわけで、今度は上のコードをこんな風に使ってみます。

var someVar = new some.namespace.here.SomeClass();

しかし、なぜこのキーワードが使われるのか、単に public キーワードはメソッドレベルで使用され、メソッドやプロパティが外部からアクセス可能であることを意味します。では、なぜこれと同じメカニズムでクラスやインターフェイスなどを外部から見えるようにしないのでしょうか?

そうすると、次のようなコードになる。

module some.namespace.here
{
   public class SomeClass{..}
}

解決方法は?

主な理由は、以下の通りです。 export はECMAScriptの計画に合致しています。public の代わりに export を使うべきだったという意見もありますが、export/private/protected がアクセス修飾子としてうまくマッチしていないということ以外に、両者の間に微妙な違いがあるからこその説明だと思います。

TypeScriptでは、クラスのメンバを public または private は、生成されるJavaScriptに何の影響も及ぼしません。これは単に設計時やコンパイル時のツールであり、TypeScriptのコードがアクセスすべきでないものにアクセスするのを阻止するために使用できる。

を使用すると export キーワードを使用すると、JavaScript はエクスポートされたアイテムをモジュールに追加するための行を追加します。あなたの例では here.SomeClass = SomeClass; .

つまり、概念的には、可視性を制御するのは publicprivate は単なるツーリング用であるのに対し export キーワードは出力を変更します。