📅  最后修改于: 2023-12-03 14:48:05.757000             🧑  作者: Mango
TypeScript模块是一种组织和复用代码的机制,它允许我们将代码分割为独立的文件,并在需要时将它们加载到应用程序中。
要将模块中的代码公开给其他模块使用,需要使用export
关键字。
例如,在util.ts
文件中,我们可以定义一个函数,并使用export
将其公开给其他模块:
export function add(num1: number, num2: number): number {
return num1 + num2;
}
此时,我们可以从另一个模块中导入util.ts
文件中的add
函数:
import { add } from './util';
console.log(add(1, 2)); // 输出 3
要将一个模块导入到另一个模块中,可以使用import
关键字。
例如,如果我们有一个名为math.ts
的模块,其中定义了一个名为PI
的常量和一个名为sqrt
的函数:
export const PI = 3.14159;
export function sqrt(num: number): number {
return Math.sqrt(num);
}
我们可以在另一个模块中导入math.ts
文件中的内容:
import { PI, sqrt } from './math';
console.log(PI); // 输出 3.14159
console.log(sqrt(16)); // 输出 4
如果要导入所有导出的内容,则可以使用星号(*
):
import * as math from './math';
console.log(math.PI); // 输出 3.14159
console.log(math.sqrt(16)); // 输出 4
在一个模块中,只能有一个默认导出。默认导出通常用于导出单个对象、函数或类。
例如,在一个名为person.ts
的模块中,我们可以定义一个名为Person
的类,并将其作为默认导出:
export default class Person {
private name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
getDetails(): string {
return `Name: ${this.name}, Age: ${this.age}`;
}
}
我们可以将Person
类导入到另一个模块中:
import Person from './person';
const john = new Person('John', 30);
console.log(john.getDetails()); // 输出 Name: John, Age: 30
TypeScript模块系统还支持异步导入,这使得我们可以在需要时动态地加载模块。
例如,在asyncModule.ts
模块中,我们可以定义一个异步函数,并在其中导入math.ts
模块:
export async function compute(): Promise<number> {
const math = await import('./math');
return math.PI * 2;
}
在另一个模块中,我们可以异步调用compute()
函数并获取结果:
async function main() {
const result = await compute();
console.log(result); // 输出 6.28318
}
需要注意的是,异步导入只能在支持ES2015模块的浏览器(如Chrome)中使用,或者在使用webpack等构建工具时进行转换。
通过使用TypeScript模块,我们可以更好地组织和复用我们的代码。我们可以通过导入和导出模块来分割代码,并将其加载到我们的应用程序中。TypeScript还支持默认导出和异步导入,这使得我们可以更加灵活地使用模块。