Typescript系列 基础篇 (六) 模块化入门篇
Typescript 系列 基础篇 (六) 模块化入门篇
TS
模块化是建立在JS
模块化的基础上,与JS
中的写法有许多的不同之处。TS
极大地支持了主流的ESM
和CommomJs
,也对其他的模块化方案有所兼容。
一、ES
模块化语法
1. export
导出
TS
支持ES
模块化方案,写法和JS
中一致。
1 | // ModuleA.ts |
2. import
导入
- 使用
import
加载其它模块,和JS
中一致,可以使用as
重命名。
1 | // main.ts |
- 可以混合导入,但是默认项必须写在前面。
1 | // main.ts |
- 可以使用
import *
来导入所有内容,并用as
重命名。
1 | // main.ts |
- 可以使用
import + 文件名
来导入一个文件,这种情况下,被导入的文件中的代码会被执行,可能会对当前作用域中的变量产生影响。
1 | // main.ts |
TS
特有的语法JS
中没有interface
、type
等概念,没有相应的关键字。因此,interface
和type
语句是TS
特有的导出语法。1
2
3
4
5
6
7
8
9// ModuleB.ts
export type Cat = { breed: string; yearOfBirth: number };
export interface Dog {
breeds: string[];
yearOfBirth: number;
}
export const c = 1;导入时正常导入就行了。
import type
语法该语法只能用来导入类型。
1
2// 不能导入变量c
import type { Cat, Dog } from "./ModuleB";inline type imports
TS 4.5
版本允许混合导入类型和变量。把type
关键字写在导入的类型前面,不写type
的则为变量。1
2// 不能导入变量c
import { type Cat, type Dog, c } from "./ModuleB";
具有
CommonJs
表现的ES
语法使用
export = { // ... }
来导出的模块,既可以用CommonJs
语法导入,也可以用ESM
的兼容语法import a = require('./xxx')
语法导入。1
2
3
4
5
6
7
8// ModuleX.ts
export = {
name: "x",
};
// app.ts
const a = require("./ModuleX"); // 不推荐
import b = require("./ModuleX"); // 推荐写法
二、CommonJs
模块化语法
通过 全局变量 module
上的 exports
属性来设置导出的内容。
1 | // MathModule.ts |
对应的,使用 require
来导入。
1 | // main.ts |
TS
系列基础篇就写到这儿了,累了,TS
进阶篇再见。另外,想进一步了解TS
模块化的知识,可以参考我的TS
进阶系列:深入理解 TS 模块。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Onlyy🦄!
评论