声明合并与模块扩充有哪些合法用途,如何避免污染全局类型?
简答题困难621 次浏览
参考答案与解析
核心结论:声明合并是 TypeScript 将同名且允许合并的声明组合为一个类型实体的机制,模块扩充则是在已有模块的公开声明上增加成员。它们适合描述真实存在的运行时扩展,例如插件为框架实例增加属性、第三方库确实注册了新方法;不适合凭空修改类型来压制错误。类型声明必须忠实对应运行时行为,否则会形成“编译器认为存在、执行时实际不存在”的隐蔽缺陷。
底层机制上,接口可以通过多个同名声明合并成员,命名空间也能与部分声明形态组合,但类型别名不能进行同名合并。模块扩充使用目标模块的实际模块标识符,并遵循正常模块解析找到原声明,然后把新增声明并入其中。全局扩充通常需要文件本身先成为外部模块,再在 declare global 中添加内容
