TypeScript 模块
简介
任何包含 import 或 export 语句的文件,就是一个模块(module)。相应地,如果文件不包含 export 语句,就是一个全局的脚本文件。
模块本身就是一个作用域,不属于全局作用域。模块内部的变量、函数、类只在内部可见,对于模块外部是不可见的。暴露给外部的接口,必须用 export 命令声明;如果其他文件要使用模块的接口,必须用 import 命令来输入。
如果一个文件不包含 export 语句,但是希望把它当作一个模块(即内部变量对外不可见),可以在脚本头部添加一行语句。
export {};
上面这行语句不产生任何实际作用,但会让当前文件被当作模块处理,所有它的代码都变成了内部代码。
ES 模块的详细介绍,请参考 ES6 教程,这里就不重复了。本章主要介绍 TypeScript 的模块处理。
TypeScript 模块除了支持所有 ES 模块的语法,特别之处在于允许输出和输入类型。
export type Bool = true | false;
上面示例中,当前脚本输出一个类型别名Bool。这行语句把类型定义和接口输出写在一行,也可以写成两行。
type Bool = true | false;
export { Bool };
假定上面的模块文件为a.ts,另一个文件b.ts就可以使用 import 语句,输入这个类型。
import { Bool } from './a';
let foo:Bool = true;
上面示例中,import 语句加载的是一个类型。注意,加载文件写成./a