У TypeScript є два простори оголошень: простір оголошення variable і простір оголошення type. Ці поняття досліджуються нижче.
Простір оголошення типу містить матеріал, який можна використовувати як анотацію типу. Наприклад нижче наведено кілька декларацій типів:
class Foo {};
interface Bar {};
type Bas = {};
Це означає, що ви можете використовувати Foo
, Bar
, Bas
як анотацію типу. Наприклад:
var foo: Foo;
var bar: Bar;
var bas: Bas;
Зауважте, що навіть якщо у вас є інтерфейс
, ви не можете використовувати її як змінну, оскільки вона не сприяє простору оголошення змінних. Це показано нижче:
interface Bar {};
var bar = Bar; // ERROR: "cannot find name 'Bar'"
Причина, чому він каже не вдається знайти ім’я
, полягає в тому, що ім’я Bar
не визначено у просторі оголошення змінної. Це підводить нас до наступної теми «Простір оголошення змінних».
Простір оголошення змінної містить матеріал, який можна використовувати як змінну. Ми побачили, що наявність class Foo
вносить тип Foo
в простір оголошення type. Вгадай що? Він також додає змінну Foo
до простору оголошення змінної, як показано нижче:
class Foo {};
var someVar = Foo;
var someOtherVar = 123;
Це чудово, оскільки іноді ви хочете передати класи як змінні. Пам'ятайте, що:
- ми не могли використовувати щось на зразок
інтерфейсу
, який є тільки у просторі оголошення type як змінну.
Подібним чином те, що ви оголошуєте за допомогою var
, знаходиться тільки в просторі оголошення variable і не може використовуватися як анотація типу:
var foo = 123;
var bar: foo; // ERROR: "cannot find name 'foo'"
Причина, чому написано не вдається знайти ім’я
, полягає в тому, що ім’я foo
не визначено у просторі оголошення type.