JS/TSにおいて、ファイルがスクリプトファイルかモジュールファイルかによって扱いが変わる。昔のJSはすべてのファイルがスクリプトファイル。今は区別できるようになっている。
スクリプトファイルのロード用マークアップ:
<script nomodule type="text/javascript" src="ファイルパス" ></script>
モジュールファイルのロード用マークアップ:
<script type="module" src="ファイルパス" ></script>
ブラウザのJSに比べて、TS はヤッカイ。
- 拡張子が .mts ならモジュールファイル。
- 拡張子が .ts のとき:
- impoort か export が含まれるとモジュール
- impoort も export も含まれるないならスクリプト
モジュールファイルは独自の名前空間〈記号空間〉を持つ。TypeScriptの場合は、名前空間が宣言空間にパーティショニングされる。したがって、モジュールファイル内で宣言した名前は、大域名前空間には登録されない。
モジュール内で宣言した名前を、大域名になると勘違いしてしまうとハマる。一方、スクリプトは大域名前空間の環境下で評価実行されるので、宣言した名前は大域名前空間に直接登録される。スクリプトファイルは名前のスコープを持たない。