私がこの質問をするのは、official document about moduleに次の文章があるからです。Typescriptでは、モジュールの種類は何ですか?
このパターンのコアアイデアは、import id = require( "...") ステートメントは、モジュールによって公開される型にアクセスできるようにすることです。
私は完全に混乱しています。なぜモジュールに型があるのですか? require()がモジュールによって公開される型を与える理由は何ですか?
私がこの質問をするのは、official document about moduleに次の文章があるからです。Typescriptでは、モジュールの種類は何ですか?
このパターンのコアアイデアは、import id = require( "...") ステートメントは、モジュールによって公開される型にアクセスできるようにすることです。
私は完全に混乱しています。なぜモジュールに型があるのですか? require()がモジュールによって公開される型を与える理由は何ですか?
実行時に、モジュールをインポートする別のモジュールでは、モジュールはエクスポートごとにプロパティを持つJavaScriptオブジェクトです。そのオブジェクトのプロパティのセットは、モジュールのタイプの概要を示します。もちろん、TypeScriptは他のオブジェクトについて知ることができるように、コンパイル時にこれらのプロパティの型を知ることができます。
しかし、モジュール自身の観点からは、渡されたオブジェクトexports
にプロパティを追加するために実行される関数です。一般に、exports
オブジェクトは、その輸入者のモジュールになります。
もしそれが奇妙に思えば、モジュールの目的を見る必要があります。モジュールの目的はメンバーの範囲を限定することです。 JavaScriptでは、定義しているものの範囲を制限する主な方法は、関数内で定義することです。
TypeScriptで生成されるモジュールの関数の形式は、選択したローダオプションによって異なります。例えばCommonJSモジュール(NodeJSで使用)では、モジュールの関数は自動的にローダによって.jsファイルのconentsにラップされます。 Node.jsのために機能するには、通常、次のようになります。モジュールのロードプロセスの一環として、Node.jsのは、この無名関数をコンパイル
(function (exports, require, module, __filename, __dirname) {
<<JavaScriptFileContent>>
\n});
、その後exports
、のために(ほぼ)空のJavaScriptオブジェクトを渡し、それを呼び出しますrequire()
関数などです。通常、中間のコードは、exports
オブジェクトにプロパティを追加することによって動作します。
それはモジュール全体が何か他のものになる可能性があります。途中のコードがmodule.exports
に何か他のものを割り当てると、そのオブジェクトはランタイムモジュールオブジェクトになります。これはあまり一般的ではありません。