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

发布于 2022-09-11 21:17:04 字数 843 浏览 9 评论 0

题目描述

  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配置问题还是有另外的声明方式

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请远离我 2022-09-18 21:17:04

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文