宣言空間

TypeScriptで宣言空間という独特の言葉を使う。「名前空間」と呼ばない理由は:

  • 「名前空間」はファイルとは別なモジュールを意味するので、コンフリクトを避けた。
  • 名前の容れ物というより、名前の分類基準に近い。

宣言された名前がどの種別かは:

  1. 変数名またはメンバー名(一般的には値フィールドのラベル)
  2. 型名(一般的には型フィールドのラベル)
  3. 名前空間名(内部モジュールのラベル)

用語法がややこしくなるのを避けるために、名前空間を内部モジュールと呼ぶことにして、以降、名前空間を普通の意味で使う。

型名宣言空間と内部モジュール名宣言空間は、JavaScriptにはない。よって、型名と内部モジュール名はコンパイル時に消される。が、内部モジュール名はJavaScriptの普通の名前になって残る。つまり、変数名宣言空間と内部モジュール名宣言空間は、JavaScript名前空間に混ぜてマップされる。

宣言空間が単なる名前空間と違うのは、宣言により、複数の宣言空間に同一の名前が生成されることがある。クラス名は、変数名宣言空間と型名宣言空間に登録される。

予約語も、各宣言空間ごとに違ってよい。

宣言空間は、通常の名前空間を一律にパーティショニングしているようだ。