TypeScriptの名前構造を基準に考える。宣言空間とは、パーティションされた名前コンテナのパーティションのことで、通常は「名前空間」だが、名前空間が内部モジュールの意味なので宣言空間としている。
宣言空間は、名前の集合というよりは、順番があるので名前のリスト。
- 原則としては、ひとつの宣言空間に同じ名前が複数出現できない。
- 例外: 後の名前が先の名前を上書きすることがある。
- 例外: 後の名前のリファレントが、先の名前に追加されることがある。
- 例外: 同一の名前が異なる複数のリファレントを持つことがある。
それぞれ、
- 一意不変名〈イミュータブル〉 再宣言/再定義でエラー
- 上書き可能名〈オーバーライタブル〉 再宣言/再定義で破壊的書き換え
- 追加可能名〈アダブル〉 再定義で追加
- 多義名〈アンビギュアス〉再宣言/再定義で多義化(一種の追加)
- 課題:これを形式化する必要がある。