スクリプトとモジュール

JS/TSにおいて、ファイルがスクリプトファイルかモジュールファイルかによって扱いが変わる。昔のJSはすべてのファイルがスクリプトファイル。今は区別できるようになっている。

スクリプトファイルのロード用マークアップ:

<script nomodule type="text/javascript" src="ファイルパス" ></script>

モジュールファイルのロード用マークアップ:

<script type="module" src="ファイルパス" ></script>

ブラウザのJSに比べて、TS はヤッカイ。

  1. 拡張子が .mts ならモジュールファイル。
  2. 拡張子が .ts のとき:
    1. impoort か export が含まれるとモジュール
    2. impoort も export も含まれるないならスクリプト

モジュールファイルは独自の名前空間〈記号空間〉を持つ。TypeScriptの場合は、名前空間が宣言空間にパーティショニングされる。したがって、モジュールファイル内で宣言した名前は、大域名前空間には登録されない。

モジュール内で宣言した名前を、大域名になると勘違いしてしまうとハマる。一方、スクリプトは大域名前空間の環境下で評価実行されるので、宣言した名前は大域名前空間に直接登録される。スクリプトファイルは名前のスコープを持たない。