模块与命名空间

现代 TypeScript 工程以 ES Modulesimport / export)为主;namespace 为早期组织手段,新代码优先「一文件一模块」或目录桶文件(barrel),慎用全局 namespace


ESM 语法要点

import { foo } from './foo.js' // 扩展名策略依 moduleResolution / bundler 而定
import type { User } from './types' // 仅类型导入
export type { User }
export { foo }
export default class Service {}
  • import type / export type:避免纯类型依赖引发的运行时循环或多余输出(配合 tsconfig配置verbatimModuleSyntax 等新选项)。
  • 合并默认与命名:保持与打包器约定一致。

.ts.tsx 的解析

路径解析由 moduleResolutionnode16 / bundler / nodenext 等)与 package.json exports 字段共同决定;迁移 Node ESM 时尤为敏感。


namespace(遗留)

namespace App {
  export const v = 1
}
  • 可嵌套、可声明合并;易与全局污染、测试隔离冲突
  • 声明文件 .d.ts 中仍常见 declare namespace 描述 UMD/全局脚本。

triple-slash 指令

/// <reference types="node" />

多用于声明文件类型根引用;应用代码尽量用 importtypes 字段。


与 JavaScript 的关系

运行时模块语义以标准与打包器为准;TS 只做类型检查擦除(或 tsc 转译,视配置而定)。


相关链接