模块与命名空间
现代 TypeScript 工程以 ES Modules(import / 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 的解析
路径解析由 moduleResolution(node16 / bundler / nodenext 等)与 package.json exports 字段共同决定;迁移 Node ESM 时尤为敏感。
namespace(遗留)
namespace App {
export const v = 1
}- 可嵌套、可声明合并;易与全局污染、测试隔离冲突。
- 声明文件
.d.ts中仍常见declare namespace描述 UMD/全局脚本。
triple-slash 指令
/// <reference types="node" />多用于声明文件与类型根引用;应用代码尽量用 import 与 types 字段。
与 JavaScript 的关系
运行时模块语义以标准与打包器为准;TS 只做类型检查与擦除(或 tsc 转译,视配置而定)。
相关链接
- tsconfig配置(
module、moduleResolution、paths、verbatimModuleSyntax) - 接口与类型别名(
export类型与值) - 基础类型(副作用 free 的类型导出)