为什么Vue + typescript 的两个模块声明不能同时共存?

新手上路,请多包涵

题目描述

  1. 创建了一个项目,如果Vue要使用Typescript话需要引入对Vue模块文件的类型支持(为Typescript)
  2. 同时,很多第三方ui库都有相应的$message等扩展需要挂载到Vue.prototype上,以为Typescript的类检查机制,它会检查当前组件(比如当前页是Home)上是否有,你能调用,但是实际上是home继承了Vue的prototype,所以Typescript并不能检查到而报错 * doesn't exist on type “home”

相关代码

解决方式都有

解决方式是:
解决 .Vue 文件问题

declare module '*.vue' {
  import Vue from "vue"
  export default Vue //没有这个在main.ts 里import App.vue会报找不到对应模块的错,但是不影响实际使用

}

解决this.$message 问题

import VueRouter, { Route } from 'vue-router'  
declare module "vue/types/vue" {
  interface Vue {
    $router: VueRouter
    $route: Route
    $APPMODE: boolean
  }
}

但是这两个处理不能同时生效!即便是放在两个不同的文件里也不能生效,不清楚是因为ts配置问题还是有另外的声明方式

我的疑惑是它为什么不能同时生效,或者其它的解决办法是什么?

阅读 2.1k
1 个回答

项目太大或者项目久了没关IDE记得经常重启电脑和VScode,Vetur的异常报错,23307异常了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进