ZetCode

TypeScript 模块

最后修改时间:2025年3月3日

TypeScript 中的模块将代码组织成可重用、可维护的单元。它们使用 importexport 语句在文件之间共享代码。本教程将通过实际示例深入探讨模块语法、默认导出和命名空间。

基本模块语法

模块允许导出和导入变量、函数和类。此示例演示了基本模块用法。

mathUtils.ts
export function add(a: number, b: number): number {
    return a + b;
}

export function subtract(a: number, b: number): number {
    return a - b;
}
main.ts
import { add, subtract } from './mathUtils';

console.log(add(10, 5));      // Output: 15
console.log(subtract(10, 5)); // Output: 5

mathUtils 模块导出了两个函数。main 模块导入并使用它们。

默认导出

一个模块可以有一个默认导出。默认导出简化了导入。

logger.ts
export default function log(message: string): void {
    console.log(`[LOG]: ${message}`);
}
main.ts
import log from './logger';

log("This is a log message.");  // Output: [LOG]: This is a log message.

默认导出无需花括号即可导入,并且可以具有任何名称。

命名空间导入

命名空间导入将多个导出分组到一个名称下。

mathUtils.ts
export function add(a: number, b: number): number {
    return a + b;
}

export function subtract(a: number, b: number): number {
    return a - b;
}
main.ts
import * as MathUtils from './mathUtils';

console.log(MathUtils.add(10, 5));      // Output: 15
console.log(MathUtils.subtract(10, 5)); // Output: 5

命名空间导入对于组织相关函数很有用。

重新导出模块

模块可以重新导出其他模块,以创建单一入口点。

mathUtils.ts
export function add(a: number, b: number): number {
    return a + b;
}

export function subtract(a: number, b: number): number {
    return a - b;
}
index.ts
export { add, subtract } from './mathUtils';
main.ts
import { add, subtract } from './index';

console.log(add(10, 5));      // Output: 15
console.log(subtract(10, 5)); // Output: 5

通过在一个文件中整合导出,重新导出可以简化导入。

动态导入

动态导入在运行时异步加载模块。

mathUtils.ts
export function add(a: number, b: number): number {
    return a + b;
}
main.ts
async function loadModule() {
    const mathUtils = await import('./mathUtils');
    console.log(mathUtils.add(10, 5));  // Output: 15
}

loadModule();

动态导入对于代码拆分和延迟加载很有用。

命名空间

命名空间对相关代码进行分组,并避免全局作用域污染。

mathUtils.ts
namespace MathUtils {
    export function add(a: number, b: number): number {
        return a + b;
    }
}

export { MathUtils };
main.ts
import { MathUtils } from './mathUtils';

console.log(MathUtils.add(10, 5));  // Output: 15

命名空间是组织代码的模块替代方案。

最佳实践

来源

TypeScript 模块文档

本教程通过实际示例介绍了 TypeScript 模块。实施这些模式可以编写模块化、可维护的代码。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 TypeScript 教程