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 {},否则它就不是"扩展",而是"覆盖"了!

相关推荐
|晴 天|14 小时前
Vue 3 + TypeScript + Element Plus 博客系统开发总结与思考
前端·vue.js·typescript
猫32815 小时前
v-cloak
前端·javascript·vue.js
旷世奇才李先生15 小时前
Vue 3\+Vite\+Pinia实战:企业级前端项目架构设计
前端·javascript·vue.js
Lkstar19 小时前
我把Vue2响应式源码从头到尾啃了一遍,这是整理笔记
vue.js
吴声子夜歌20 小时前
Vue3——新语法
前端·javascript·vue.js
jiayong2320 小时前
第 36 课:任务详情抽屉快捷改状态
开发语言·前端·javascript·vue.js·学习
琢磨先生TT21 小时前
为什么很多后台系统功能不少,看起来却还是很廉价?
前端·vue.js·设计
一 乐1 天前
交通感知与车路协同系统|基于springboot + vue交通感知与车路协同系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·交通感知与车路协同系统
踩着两条虫1 天前
强强联合!VTJ.PRO 正式接入 DeepSeek V4,AI 编码能力再跃升
前端·vue.js·ai编程
得想办法娶到那个女人1 天前
项目中 TypeScript 类型推导 极简实战总结
前端·javascript·typescript