按Vue官方文档扩展TS全局类型后,调用原型挂载方法报不存在错误
问题排查解决步骤
- 第一步:检查类型声明文件的TS扫描配置
确认你的shims-vue.d.ts文件所在路径,已经被tsconfig.json的include数组覆盖,示例配置如下:
如果d.ts文件放在根目录,需要额外把对应路径加进include数组。{ "include": [ "src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue" ] } - 第二步:修正类型声明文件的模块属性
TS默认把没有import/export的文件识别为全局脚本,这种情况下模块扩展不会生效,需要在你的shims-vue.d.ts末尾加上一行export {}将文件转为模块,完整示例:// shims-vue.d.ts declare module '*.vue' { import Vue from 'vue' export default Vue } declare module 'vue/types/vue' { interface Vue { // 挂载的原型方法类型 $someFn: () => void } } // 新增这行 export {} - 第三步:重启编辑器TS语言服务
修改类型声明文件后,编辑器的TS服务不会自动热更新,按快捷键Ctrl+Shift+P(Mac系统为Cmd+Shift+P),选择「TypeScript: 重启TS服务器」,等待服务重启完成后再检查报错。 - 第四步:校验依赖版本匹配
如果你使用Vue2项目,确保依赖版本符合要求:vue版本为2.x@types/vue版本为2.xvue-property-decorator版本为8.x(9.x及以上仅支持Vue3)
版本不匹配会导致类型扩展无法正确合并。
- 第五步:确认原型挂载逻辑
检查main.ts中的挂载逻辑,确保是挂载到Vue.prototype而非单个实例上:// main.ts 正确写法 import Vue from 'vue' Vue.prototype.$someFn = () => { // 方法逻辑 }
内容的提问来源于stack exchange,提问作者Dong Han
相关产品推荐
相关产品推荐

