跳到主要内容

模块与命名空间

现代 TypeScript 以 ES 模块 为主;namespace 仅在少数遗留 / 声明场景出现。CJS / ESM 运行时差别与循环依赖见 模块系统。

ES 模块​

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

export type Num = number;

// app.ts
import { add, type Num } from "./math";

const x: Num = add(1, 2);

import type / import { type X } 明确只导入类型,有助于 erasableSyntaxOnly 等擦除友好配置,也让意图更清晰。

默认导出 vs 命名导出​

export default class Service {}
export const VERSION = "1";

团队内优先命名导出,便于重命名与 tree-shaking 直觉;默认导出并非错误,但混用易乱。

命名空间:少用​

namespace Legacy {
export function helper() {}
}

新代码优先文件级模块。namespace 仍可能出现在:

  • 旧项目迁移
  • 给全局库写类型时的组织方式(更多见进阶「声明文件」)

要点​

  1. 一文件一模块;用 export / import
  2. 类型导入写清 import type
  3. 新项目避免 namespace 作为代码组织手段