У TypeScript є два простори оголошень: простір оголошення variable і простір оголошення type. Ці поняття досліджуються нижче.
Type Declaration Space
Простір оголошення типу містить матеріал, який можна використовувати як анотацію типу. Наприклад нижче наведено кілька декларацій типів:
classFoo{};interfaceBar{};typeBas={};
Це означає, що ви можете використовувати Foo, Bar, Bas як анотацію типу. Наприклад:
varfoo:Foo;varbar:Bar;varbas:Bas;
Зауважте, що навіть якщо у вас є інтерфейс, ви не можете використовувати її як змінну, оскільки вона не сприяє простору оголошення змінних. Це показано нижче:
interfaceBar{};varbar=Bar;// ERROR: "cannot find name 'Bar'"
Причина, чому він каже не вдається знайти ім’я, полягає в тому, що ім’я Barне визначено у просторі оголошення змінної. Це підводить нас до наступної теми «Простір оголошення змінних».
Variable Declaration Space
Простір оголошення змінної містить матеріал, який можна використовувати як змінну. Ми побачили, що наявність class Foo вносить тип Foo в простір оголошення type. Вгадай що? Він також додає зміннуFoo до простору оголошення змінної, як показано нижче:
classFoo{};varsomeVar=Foo;varsomeOtherVar=123;
Це чудово, оскільки іноді ви хочете передати класи як змінні. Пам'ятайте, що:
ми не могли використовувати щось на зразок інтерфейсу, який є тільки у просторі оголошення type як змінну.
Подібним чином те, що ви оголошуєте за допомогою var, знаходиться тільки в просторі оголошення variable і не може використовуватися як анотація типу:
Причина, чому написано не вдається знайти ім’я, полягає в тому, що ім’я fooне визначено у просторі оголошення type.