TypeScript 声明合并和模块扩展有哪些边界?
区分接口合并、命名空间合并和 module augmentation,理解它们只影响类型系统而不自动改变运行时。
参考答案
同名 interface 可以合并成员,命名空间和部分声明也有合并规则;module augmentation 可以为已有模块补充类型声明。这些行为改变的是 TypeScript 对类型的理解,不会自动给运行时对象增加属性或方法。
扩展第三方模块时,增强文件必须被编译器包含,模块路径必须与实际导入字符串一致。默认导出和新声明也有语法限制,不能把任意默认导出重新声明成可扩展接口。
声明合并适合为稳定库补充缺失类型,但会让类型来源变得隐蔽。应限制扩展范围、写测试和维护说明,避免用全局声明掩盖真实 API 不一致。