
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.2 声明空间
在TypeScript中,存在两种声明空间:类型声明空间和变量声明空间。下文将分别讨论这两个概念。
1.类型声明空间
类型声明空间包含用来当作类型注解的内容,例如下面的类型声明。

你可以将Foo、Bar、Bas作为类型注解使用,示例如下。

注意,尽管你定义了interface Bar,却并不能够把它作为一个变量来使用,因为它没有定义在变量声明空间中。

出现提示错误:不能发现名称Bar的原因是名称Bar并未定义在变量声明空间中。这将带领我们进入下一个主题——变量声明空间。
2.变量声明空间
变量声明空间包含可用作变量的内容,在上文中class Foo提供了一个类型Foo到类型声明空间,此外它还提供了一个变量Foo到变量声明空间,如下所示。

这很棒,尤其是当你想把一个类当作变量传递时。
我们并不能把一些如interface定义的内容当作变量使用。
与此相似,一些用var声明的变量,也只能在变量声明空间使用,不能用作类型注解。

提示不能发现名称foo的原因是,名称foo没有定义在类型声明空间里。