从EcmaScript2015(我们常说的ES6)开始,引入了模块的概念,TypeScript也沿用了模块的概念。模块内的方法,变量不会暴露到全局,他们有自身的作用域,想在外部使用必须使用export进行导出,并在引用模块的地方使用import导入。
模块是通过模块加载器加载的,在JavaScript的ES6版本之前,最常用的模块加载器是NodeJS使用的CommonJS规范和前端使用的RequireJS。而现在前端都使用ES6的模块化机制,NodeJS还在使用自己的基于CommonJS的规范,其余都已成为历史,TypeScript的模块化机制和ES6的相同。
任何声明都能通过export关键字导出。例子:
export const numberRegexp = /^[0-9]+$/;
export class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
如果需要对导出的部分进行重命名,可以使用导出语句:
class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export { ZipCodeValidator };
export { ZipCodeValidator as mainValidator };
使用import关键字进行导入:
import { ZipCodeValidator } from "./ZipCodeValidator";
let myValidator = new ZipCodeValidator();
导入也可以使用as进行重命名。
模块定义:
let numberRegexp = /^[0-9]+$/;
class ZipCodeValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export = ZipCodeValidator;
导入:
import zip = require("./ZipCodeValidator");