TypeScript 模块扩展

TypeScript 支持你"扩展现有模块的类型定义 ",这称为 模块扩展(Module Augmentation),常见于:

  • 为第三方库添加缺失的类型定义

  • 扩展现有模块的接口或类型

  • 使用 declare module 'xxx' 扩展模块内容

❗ 为什么要"放在模块中"?

如果你写了 declare module 'xxx' {...}

  • ✅ 如果这个文件是一个模块(有 export {}),那么你写的东西是"扩展"原模块。
  • ❌ 如果这个文件是 script(无 import/export),那它就是"声明一个全新的模块",会覆盖原来的类型

✅ 示例:正确扩展模块

typescript 复制代码
// example.d.ts
export {}; // 👈 让这个文件成为模块!

declare module 'vue' {
  interface ComponentCustomProperties {
    $trans: (key: string) => string;
  }
}

✅ 这样,TypeScript 会将你的扩展 合并'vue' 原来的类型中。


❌ 示例:错误用法(会覆盖原模块)

typescript 复制代码
// example.d.ts
// ❌ 没有 export/import,这会变成全局 script

declare module 'vue' {
  interface ComponentCustomProperties {
    $trans: (key: string) => string;
  }
}

这样会导致 TypeScript 认为你声明的是整个模块的完整定义 ,原有类型就会被完全替换掉,造成类型错误或丢失。


✅ 总结一句话:

如果你想扩展 TypeScript 中的已有模块,记得把扩展代码放在一个模块文件里(至少写个 export {},否则它就不是"扩展",而是"覆盖"了!

相关推荐
程序定小飞7 小时前
基于springboot的在线商城系统设计与开发
java·数据库·vue.js·spring boot·后端
mit6.8247 小时前
理念导向编程|ts
rust·typescript
BumBle8 小时前
uniapp 用css实现圆形进度条组件
前端·vue.js·uni-app
Komorebi_99998 小时前
Vue3 + TypeScript provide/inject 小白学习笔记
前端·javascript·vue.js
二十雨辰10 小时前
vite性能优化
前端·vue.js
明月与玄武10 小时前
浅谈 富文本编辑器
前端·javascript·vue.js
FuckPatience10 小时前
Vue 与.Net Core WebApi交互时路由初探
前端·javascript·vue.js
aklry11 小时前
elpis之学习总结
前端·vue.js
FuckPatience13 小时前
Vue ASP.Net Core WebApi 前后端传参
前端·javascript·vue.js
Komorebi_999913 小时前
Vue3 provide/inject 详细组件关系说明
前端·javascript·vue.js