活字体モジュールシステムの名前空間宣言の合併

名前空間

効果的にグローバル名前空間の汚染を避けることができます。導入後ES6モジュールの名前空間は言及されにくくなります。グローバルなクラスライブラリの名前空間はまだ良い解決策である場合。

シェイプ{名前空間
   CONST PI =にMath.PI; 
   //キーワードをエクスポートし、エクスポートを使用して、空間は、グローバル内部見ることができる
   エクスポート関数サークル(R&LT:数){ 
      戻りPI * R&LT ** 2 
   } 
   スクエア(5)
} 
Shape.circle( 10); //グローバル空間には、エクスポートにアクセスすることができます
= Shape.circle輸入円を、個人名から//変数の名前空間の中に、インポートとモジュラーインポートが同じではないという意味ところそれを明確にするために
サークル(20)。

プログラムの拡大に伴い、名前空間は素晴らしいものだ、それは、異なる名前空間のファイルに同じ名前を使用して、分割し、それらの間の名前空間を共有する必要があります。

Space1.ts // 
/// <基準パス=「space2.ts」/> // 3つの斜め参照タグは、コンパイラ、2つのファイルが存在する内部の名前空間を伝える依存関係の
名前空間{形状
   エクスポート機能スクエア(X :番号){ 
      戻りXの*のX; 
   } 
   円(10); //円であることをアクセスするためのエクスポート、である
} 

// space2.ts 
</基準パス= "space1.ts"> /// 
形{名前空間
   CONSTをMath.PI = PI; 
   //エクスポートエクスポートキーワードを使用して、空間は、グローバル内部見ることができる
   エクスポート関数サークル(R&LT:数){ 
      戻りPI * R&LT ** 2 
   } 
   スクエア;(5。)
}

名前空間は一緒にして、モジュール混在しないことをお勧めです

モジュラーシステム

活字体がES6 CommonJSモジュールとシステムの両方のための非常に良いサポートを持って、我々は基本的に古い言い回しを採用することができます。しかし、二人は混合があれば、準備された文言の互換性のTSを使用する必要があり、混在させないでください。

さんは言葉遣いES6とCommonJSのそれぞれを見てみましょう

// ES6を導入
'./Modularシステム/ ES6 / A 'からインポート{A、B}を、
' ./Modularシステム/ ES6 / A'から{F} ASインポート; 
システム./Modular」からインポートすべてのAS * / ES6 / A '; 
ABCからインポート' ./Modularシステム/ ES6 / B '; 
のObjからインポート' ./Modularシステム/ ES6 / A ' 
ES6輸出のための// 
のObj defalut輸出; 
輸出{A、B、C}。
{D} D輸出AS; 
'./a'からC {D}としてエクスポート; // Dはa.ts非デフォルトa.tsの有効利用を導出することができる、名前の変更およびエクスポート

/ / CommonJSは中に導入
( 'モジュラーシステム/ノード/ a.ts ./ ')必要= LETのC1 
LET C2は=('モジュラーシステム/ノード/ B ./')を必要と; 
// CommonJS由来
module.exportsはは=; / /変数由来の
exports.c = 3; 
exports.d = 4; 
に対応する
モジュール。輸出= {C:3、D 4} 
2つの方法の共存、モジュール場合。輸出はexports.cをエクスポートするには、この方法で説明します

両方のモジュールは、インポートおよびエクスポートに対応していません。

  • エクスポート:ES6輸出のデフォルトを許可し、同時に複数の変数をエクスポートしますが、一つだけのフォームCommonJSが導出され、一つは別のものを上書きします。
  • インポート:ES6は需要はそれらすべてをインポートすることができますインポート、だけCommonJSすべてインポートすることができます。

あなたはデータモジュールES6、ES6非インポートモジュールで投げる場合は、問題が発生します。だから、別のモジュラーシステムを混在しないようにしてください。ノー代替する場合は、TSが提供する構文との互換性を使用することができます。

//エクスポート
エクスポート= A; 
//インポート
インポートC4が必要(「../ ES6 / C」)=; 
/ * 
導出する上記の方法を使用している場合は1を、この文書は他の形態をエクスポートするために許可されていない
上記形態の2を導出しますデータだけでなく、上記の構文を導入し、導入もES6方法することができます。真の構成アイテムを開くには:「esModuleInterop」をtsconfig.jsonことを条件とします。
* /

文の合併

 文のコンパイラは、プログラムを組み合わせた文で、同じ名前に散在することができるように同じ名前を持つ複数の手段は、一つにマージされ配置されます。

例えば:

{StateMergeインタフェース
   X:番号、
   Y:文字列
} 
インタフェースStateMerge { 
   Y:文字列; 
   FOO(バー:文字列[]):文字列[]、
}を
//この時点で同じ名前のインターフェース部材を組み合わせ二つに宣言される
stateMergeをみましょう。 = {StateMerge 
   X :. 1、
   Y: "15"、
   FOO(バー:任意){ 
      リターンバー
   } 
}。

同じ名前の2人のメンバーの合併の内部構造はどのように行いますか?

  • 非メンバ関数の場合、あなたは同じタイプ、それ以外の場合はエラーでなければなりません。
  • 関数メンバの場合、以下のルールに従って行われるオーバーレイの順。
インタフェースStateMerge { 
   X:数、
   Y:文字列、
   FOO(バー:数):数; // 4 
   FOO(バー:文字列):文字列。// 5 
   FOO(バー: "B"):数; // 2 
} 
インターフェースStateMerge { 
   Y:ストリング。
   FOO(バー:文字列[]):文字列[] // 3 
   FOO(バー: "A"):番号、// 1 
}

順序に従って内部インターフェイス。インタフェース文のインターフェイス機能のより緊密なソートされたメンバーのトップへ。

引数が表示された場合は、最高のランク付け。最初の行で、インタフェースの前のインターフェースの背後にある第二位です。上記ソートノートに示すように。

機能や名前空間をマージ

LIB関数(){ 
} 
名前空間{LIB 
   エクスポート版LET = '1.0' 
} 
にconsole.log(Lib.version); //属性はLIB機能を追加することと等価です

組み合わせクラスと名前空間

C {クラス
} 
名前空間{C 
   エクスポートがLETの状態= 1 
} 
にconsole.log(C.state); //属性状態は、クラスCを添加することと等価です

また、あなたが列挙性を高めることができます。

注:人生は、名前空間とクラスで、時間の関数をマージすること、関数の後、クラスに名前空間にしてください。それ以外の場合はエラー。

 

おすすめ

転載: www.cnblogs.com/V587Chinese/p/11519477.html