Пространство декларации

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

Пространство объявления типа

Пространство объявления типа содержит код, используемый в качестве аннотации типа, например следующие объявления типа:

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

Вы можете использовать Foo, Bar, Bas в качестве аннотаций типа, например:

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

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

interface Bar {}
const bar = Bar; // Error: "cannot find name 'Bar'"

Причина, по которой сообщается cannot find name 'Bar', заключается в том, что имя Bar не определено в пространстве объявления переменных. Это перенесет нас к следующей теме 'Пространство объявления переменных'.

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

Пространство объявления переменных содержит код, который можно использовать в качестве переменных. В приведенном выше описании class Foo предоставляет тип Foo для пространства объявления типов. Кроме того, он также предоставляет переменную Foo для пространства объявлений переменных следующим образом:

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

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

Точно так же переменные, которые вы объявляете с помощью var, const и let могут использоваться только в пространстве объявления переменных и не могут использоваться в качестве аннотаций типов.

const foo = 123;
let bar: foo; // ERROR: "cannot find name 'foo'"

Причина, по которой сообщается cannot find name, заключается в том, что переменная foo не определена в пространстве объявления типа.

Last updated

Was this helpful?