TypeScript 模块
从TypeScript 1.5开始,内部模块称作“命名空间”,外部模块则简称为“模块”;
模块构造出了一个独立的作用域,模块内的变量、函数、类在模块外部不可见;如果想要暴露 A 模块内的 a 函数给 B 模块,需要在 A 中使用 export 语法,同时在 B 模块中 import 从 A 暴露出的 a 函数(可以改变 B 中引用的函数名称);这是模块成员间的通信;
两个模块级别关系的建立是通过 imports 和 exports 实现的,也就是文件路径的关联;
模块间的通信和导入,依赖于模块加载器,如:CommonJS(nodejs)、RequireJS(web);
TypeScript 中,任何包含了顶级 import 或者 export 的文件都会被当成一个模块;
导出声明
任何声明(变量、函数、类、类型别名、接口)都可以通过添加 export 关键字来导出;
export interface StringValidator {
isAcceptable(s: string): boolean;
}
导出语句
另一种导出方式
class ZipCodeValidator implements StringValidator {
...
}
export { ZipCodeValidator };
// 重命名
export { ZipCodeValidator as mainValidator };
默认导出
每个模块可以有且只能有一个 default 导出,使用 default 关键字标记,导入时需要使用特殊的导入形式
declare let $: JQuery;
export default $;
---
import $ from 'JQuery';
标记为默认导出的类和函数的名字可以省略(匿名函数)
export default class ZipCodeValidator {
...
}
---
import validator from './ZipCodeValidator';
default 也可以导出一个值
重新导出
重新导出可以在当前模块不加载目标模块的情况下,导出目标模块的部分内容
export { ZipCodeValidator as Zip } from './ZipCodeValidator';
另一种用法,将多个模块的导出内容联合在一起导出
export * from "./StringValidator";
export * from "./LettersOnlyValidator";
导入
import { ZipCodeValidator } from './ZipCodeValidator';
let myValidator = new ZipCodeValidator();
重命名
import { ZipCodeValidator as ZCV } from './ZipCodeValidator';
将整个模块导入到一个变量,并通过它来访问模块的真正导出部分
import * as validator from './ZipCodeValidator';
let myValidator = new validator.ZipCodeValidator();
export = & import = require()
为了支持传统的 CommonJS 和 AMD 的工作流模型,使用 export = 定义一个模块的导出对象,另一个模块使用时 import let = require(‘module’);
生成模块代码
TypeScript 可以根据指定的模块目标参数,编译器会生成相应的供 Node.js(CommonJS),RequireJS(AMD),isomorphic(UMD),SystemJS或ES6 native modules 模块加载系统使用的代码
**
前行的路上,感谢您的鼓励!!
**