TypeScriptで宣言空間という独特の言葉を使う。「名前空間」と呼ばない理由は:
- 「名前空間」はファイルとは別なモジュールを意味するので、コンフリクトを避けた。
- 名前の容れ物というより、名前の分類基準に近い。
宣言された名前がどの種別かは:
- 変数名またはメンバー名(一般的には値フィールドのラベル)
- 型名(一般的には型フィールドのラベル)
- 名前空間名(内部モジュールのラベル)
用語法がややこしくなるのを避けるために、名前空間を内部モジュールと呼ぶことにして、以降、名前空間を普通の意味で使う。
型名宣言空間と内部モジュール名宣言空間は、JavaScriptにはない。よって、型名と内部モジュール名はコンパイル時に消される。が、内部モジュール名はJavaScriptの普通の名前になって残る。つまり、変数名宣言空間と内部モジュール名宣言空間は、JavaScript名前空間に混ぜてマップされる。
宣言空間が単なる名前空間と違うのは、宣言により、複数の宣言空間に同一の名前が生成されることがある。クラス名は、変数名宣言空間と型名宣言空間に登録される。
予約語も、各宣言空間ごとに違ってよい。
宣言空間は、通常の名前空間を一律にパーティショニングしているようだ。