7、TypeScript的模块系统和命名空间
模块导出与导入
导出
1 | let a1 = 100 |
没有默认导出
如果一个模块没有默认导出
1 | // m1.ts |
则在引入该模块的时候,需要使用下列一些方式来导入
1 | // main.ts |
导入
1 | import { a1, hello } from './a' |
模块编译
TypeScript 编译器也能够根据相应的编译参数,把代码编译成指定的模块系统使用的代码
module 选项
在 TypeScript 编译选项中,module 选项是用来指定生成哪个模块系统的代码,可设置的值有:"none"、"commonjs"、"amd"、"udm"、"es6"/"es2015/esnext"、"System"
target=="es3" or "es5":默认使用commonjs- 其它情况,默认
es6
加载非 TS 文件
有的时候,我们需要引入一些 js 的模块,比如导入一些第三方的使用 js 而非 ts 编写的模块,默认情况下 tsc 是不对非 ts 模块文件进行处理的
我们可以通过 allowJs 选项开启该特性
1 | // m1.js |
非 ESM 模块中的默认值问题
如果在js文件中导出的模块没有默认导出,那么在ts中加载需要在编译配置中打开allowSyntheticDefaultImports选项。
虽然可以编译通过,但生成的文件会默认调用default属性,因此打印出的结果是undefined,因此为了处理默认值问题,还需要打开esModuleInterop选项。
因此,如果处理非默认导出模块需要开启三个选项:
1 | { |
注意:以上设置只能当
module不为es6+的情况下有效
以模块的方式加载 JSON 格式的文件
TypeScript 2.9+ 版本添加了一个新的编译选项:resolveJsonModule,它允许我们把一个 JSON 文件作为模块进行加载
resolveJsonModule
设置为:true ,可以把 json 文件作为一个模块进行解析
data.json
1 | { |
ts文件
1 | import * as userData from './data.json'; |
命名空间
在 TS 中,export 和 import 称为 外部模块,TS 中还支持一种内部模块namespace,它的主要作用只是单纯的在文件内部(模块内容)隔离作用域
1 | namespace k1 { |
自用配置
1 | { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline









