模块
全局模块
默认情况下当你开始在一个新的 TypeScript 文件里写代码时,你的代码时在全局命名空间里的。以 foo.ts
作为例子:
var foo = 123;
如果你现在创建一个新的文件 bar.ts
在相同的项目中,你会被 TypeScript 类型系统允许使用变量 `foo 因为它是全局可用的:
var bar = foo; // 允许
不用说全局命名空间是危险的,因为它会导致你的代码出现命名冲突。我们推荐使用文件模块,这将会在下面介绍。
文件模块
也叫外部模块。如果你在 TypeScript 文件的根层次有import
或 export
的话,它会在文件中创建一个本地作用域。所以如果我们把之前的 foo.ts
改成下面这样(注意 export
的使用):
export var foo = 123;
我们会不再在全局命名空间里有 foo
。这可以通过创建一个新的文件 bar.ts
得到证明:
var bar = foo; // ERROR: "cannot find name 'foo'"
如果你想要在 bar.ts
中使用 foo.ts
中的东西,你需要明确地引入它。下面是更新后的 bar.ts
:
import {foo} from "./foo";
var bar = foo; // 允许
在 bar.ts
中使用一个 import
不仅允许你从其他文件中带来东西,还把文件 foo.ts
标记为一个模块,因此 foo.ts
不会污染全局命名空间。
使用了外部模块的给定 TypeScript 文件生成的 JavaScript 取决于编译器标识 module
。