typescript+Vue,定义在Vue.prototype的属性值,在实例TS上会报错

问题描述

我是第一次使用Vue+typescript的组织项目,现在遇到遇到一个问题就是,我把封装好的axios挂载到Vue.prototype上,使用上没有问题,但是TS会提出一个错误?

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

import api from "./http/api/index";  //挂载封装好的api
Vue.prototype.$api = api;


export default class BusinessUser extends Vue {
  //发送http请求,获取数据
    search(): void {
    this.$api.user.getMsg('UK1810000001')
    console.log(this);
  }

这里会TS报错
Property '$api' does not exist on type 'BusinessUser'.

请问大神怎么解决这个问题,
但是还是能正常发送请求的,能拿到请求的数据

阅读 24.9k
6 个回答
declare module 'vue/types/vue' {
  interface Vue {
    $axios: AxiosInstance
    $dict: Dict
    $utils: object
  }
}

一楼的答案可行,新建个 .d.ts 文件,放在 src/ 目录下。 如果还报错的话关掉ied,重启下ide就行了。我用的是 vscode

declare module 'vue/types/vue' {
  interface Vue {
    $axios: AxiosInstance
    $dict: Dict
    $utils: object
  }
}
新手上路,请多包涵

实在不行加 // @ts-ignore 吧 我试了前面“有用”的方法,重启vscode还是不行,如果有人有更好的方法,麻烦告知……

感谢2L层主的答案。
虽然时间有点久了,还是说一下,省的有人一样走弯路。两重点:

  • src目录下新建一个*.d.ts文件。(如果在shims-vue里面写的话,会导致main.ts有句话报错)
  • 重启IDE (vscode)。不重启偶有不生效的问题

就楼主的答案如下:

import VueRouter, { Route } from 'vue-router'
// 扩充
declare module 'vue/types/vue' {
  interface Vue {
    $router: VueRouter;
    $route: Route;
    $api: any;
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题