理解 50分

declare

declare 可以用于声明所有可用类型,包含 基本类型、函数、对象、type等。declare后的类型,是能全局能用的类型,用于编译阶段的检查,并不实际编入代码。

不加declare后的类型定义,要么就是变量声明、要么就是类型声明,他们的作用域都是当前文件。编译之后,有的是会生成代码的。

namespace

因为第三方库通常功能都挂在一个变量上,declare namespace 适合为 JS 书写的第三方类库定义声明文件。例如:declare namespace D3 {}

但是,对于 namespace Test {} 是可能会生成编译后代码的(怎么界定是否会生成代码,理解的不是很透),同文件可以直接引用它。

namespace中的export

对于declare namespace,内部定义的内容是否有export都可以;但是对于引用它的内部实现(声明)来说,必须要加export,否则会报错。