核心区别:模块是 ES 官方标准,命名空间是 TS 专属语法。模块基于import/export,是文件级隔离,一个文件一个模块,跨文件、跨项目通用,支持 Tree-Shaking;命名空间用namespace关键字,是逻辑级分组,本质是闭包对象,解决全局变量冲突,只能在 TS 内使用。 模块适用于现代所有前端 /Node 项目,工程化、模块化开发的标配;命名空间仅用于老项目、非模块化环境、全局代码组织,现在几乎被模块替代。简单说:新项目必用模块,老代码兼容才用命名空间。
命名空间通过namespace 名称{}包裹代码,内部成员需 export 才能外部访问,是 TS 原生的代码组织方式。可以嵌套命名空间做分层,比如namespace Utils { export namespace Form {} };跨文件用三斜线指令/// <reference path="文件.ts" />引入。 它能把相关的类、函数、接口打包在一起,避免全局污染,适合小型非模块化项目。比如把表单校验、数据格式化等工具函数统一收纳,调用时通过命名空间点取成员,逻辑清晰、无冲突,适合简单项目的代码分组管理。
声明合并是 TS 的核心特性:编译器会将多个同名的声明,自动合并为一个完整定义。支持接口、命名空间、函数、类的合并,比如重复声明同一个接口,属性会自动叠加;同名命名空间的导出成员会合并。 它极大增强了类型系统的灵活性:可以扩展第三方库的类型定义、补充 JS 内置对象的类型,无需修改原代码。对类型系统的影响是,支持渐进式拓展类型,让类型定义更灵活、可复用,同时保证类型严谨性,是框架类型定义、类型扩展的必备能力。
模块化是大型 TS 项目的基石,核心是按职责拆分文件,用 ES 模块规范隔离代码。遵循单一职责:一个文件只做一件事,按功能 / 业务分层(api、组件、工具、类型、状态),按模块划分文件夹。 统一用export/import管理依赖,通过index.ts做模块出口简化导入;配置路径别名避免冗长相对路径;规避循环依赖,单独管理类型文件;配合依赖注入解耦业务。模块化强制代码边界,让项目结构清晰、多人协作无冲突、代码可复用可测试,是大型项目维护的核心方案。
回调地狱是多层嵌套回调导致的代码混乱,TS 依托 JS 标准方案完美解决:Promise + async/await。先用 Promise 封装异步操作,指定泛型约束返回类型;再用 async/await 语法糖,用同步写法编写异步代码,彻底扁平化嵌套。 异步逻辑写在 async 函数里,await 等待 Promise 完成,用 try/catch 捕获异常;并发异步用 Promise.all/race。TS 全程加持类型安全,能精准校验异步返回值类型。相比回调,代码可读性、可维护性暴增,是 TS 处理异步的唯一标准方案,完全杜绝回调地狱。