📜  TypeScript模块(1)

📅  最后修改于: 2023-12-03 14:48:05.757000             🧑  作者: Mango

TypeScript模块

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还支持默认导出和异步导入,这使得我们可以更加灵活地使用模块。