[解決済み] Typescript はなぜ "export" というキーワードを使って、クラスやインターフェースを公開するのでしょうか?
質問
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;
.
つまり、概念的には、可視性を制御するのは
public
と
private
は単なるツーリング用であるのに対し
export
キーワードは出力を変更します。
関連
-
[解決済み】プロパティ 'value' が 'HTMLElement' 型の値に存在しない。
-
[解決済み] ts1206 デコレーターはここでは無効です、Angular 2。
-
[解決済み] TypeScriptでfetchを使う方法
-
[解決済み] tsc がプロジェクトのコンパイルに成功すると、ts-node は d.ts ファイルを無視します。
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] C#では、public、private、protected、アクセス修飾子がないことの違いは何ですか?
-
[解決済み] Typescript オブジェクトのインデックス付きメンバの型を強制する?
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み】TypeScriptのコンパイルでExperimental decoratorsの警告が出る。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ブロックスコープ付き変数の再宣言ができない(typescript)
-
[解決済み] error TS2339: Property 'x' does not exist on type 'Y'.
-
[解決済み] TypeScriptの円形型参照
-
[解決済み] TSがモジュールを見つけ出せない
-
[解決済み] TypeScriptでfetchを使う方法
-
[解決済み] TypeScriptでグローバル変数を作成する
-
[解決済み] Jestで関数をモックする方法
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] ジェネリックスを使用したTypescriptのarrow関数の構文はどのようになっていますか?