Skip to content

Latest commit

 

History

History
48 lines (36 loc) · 3.29 KB

declarationspaces.md

File metadata and controls

48 lines (36 loc) · 3.29 KB

Области объявления

В TypeScript есть две области объявления: область объявления переменных и область объявления типов. Эти понятия рассматриваются ниже.

Область объявления типов

Область объявления типа содержит данные, которые можно использовать в качестве описания типа. Например, ниже приведены несколько объявлений типов:

class Foo {};
interface Bar {};
type Bas = {};

Это означает, что вы можете использовать Foo, Bar, Bas и т.д. в качестве описания типа переменных. Например:

var foo: Foo;
var bar: Bar;
var bas: Bas;

Обратите внимание, что даже если у вас есть interface Bar, вы не можете использовать его как переменную, поскольку он не вносится в пространство объявления переменных. Это показано ниже:

interface Bar {};
var bar = Bar; // ОШИБКА: "не возможно найти имя 'Bar'"

Причина, по которой выдаётся ошибка не могу найти имя, заключается в том, что имя Bar не определено в пространстве объявления переменных. Это подводит нас к следующей теме «Пространство объявления переменных».

Область объявления переменных

Область объявления переменных содержит данные, которые вы можете использовать в качестве переменной. Мы видели, что class Foo добавляет тип Foo в область объявления типов. B угадайте, что? он также добавляет переменную Foo в область объявления переменных, как показано ниже:

class Foo {};
var someVar = Foo;
var someOtherVar = 123;

Это здорово, так как иногда вы хотите передавать классы как переменные. Помните, что:

  • мы не могли бы использовать что-то вроде interface, который находится только в области объявления типов в качестве переменной.

Точно так же то, что вы объявляете с помощью var, находится только в области объявления переменных и не может использоваться как описание типа:

var foo = 123;
var bar: foo; // ОШИБКА: "не возможно найти имя 'foo'"

Причина, по которой выдаётся ошибка не могу найти имя, заключается в том, что имя foo не определено в области объявления типов.