模块与命名空间
现代 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 仍可能出现在:
- 旧项目迁移
- 给全局库写类型时的组织方式(更多见进阶「声明文件」)
要点
- 一文件一模块;用
export/import - 类型导入写清
import type - 新项目避免
namespace作为代码组织手段