命名空间用 namespace 关键字包裹一组类型、接口与函数,通过 export 决定对外暴露什么。它是模块系统普及前的代码组织方式,常见于声明文件与遗留库,比如 jQuery、D3 的扩展。调用时写 $.ajax 或 D3.scale,编译后表现为一个全局对象或闭包。
现代项目应以 ES 模块为主,命名空间只在维护老代码、给全局变量补声明(declare global)或扩展第三方库类型(declare module)时出现。TS 5.x 依然支持但越来越少推荐,新代码用模块化即可获得更好的 tree-shaking 与作用域隔离。
namespace Utils {
export function clamp(v: number, min: number, max: number): number {
return Math.min(max, Math.max(min, v));
}
export type ID = number | string;
const internal = 1; // 未 export,外部不可见
}
Utils.clamp(5, 0, 3); // 3
const id: Utils.ID = 'x'; // OK