【问题标题】:Vue instance does not pick up shims-vue.d.ts fileVue 实例不拾取 shims-vue.d.ts 文件
【发布时间】:2020-09-22 04:03:06
【问题描述】:

我有一个如下所示的 Vue 文件:

import Vue from 'vue';
import VueRouter from 'vue-router';

export default Vue.extend({
  name: 'MyComponentsName',
  methods: {
    doRedirect() {
      this.$router.push({ name: 'another-route' });
    },
  },
});

然后在我的 shims-vue.d.ts 文件中:

declare module '*.vue' {
  import Vue from 'vue';
  export default Vue;
}

declare module 'vue/types/vue' {
  import VueRouter from 'vue-router';

  interface VueConstructor {
    $router: VueRouter;
  }

  interface Vue {
    $router: VueRouter;
  }
}

但是,我收到以下警告:Property '$router' does not exist on type 'CombinedVueInstance<Vue, ...>

据我了解,我的垫片应该告诉 Vue $router 是什么,但这似乎并没有发生。我想出的唯一解决方法是使用((this as any).$router as VueRouter).push(),但这看起来很丑……

我怎样才能摆脱这个警告?

【问题讨论】:

    标签: typescript vue.js vuejs2 typescript-definitions


    【解决方案1】:

    如果你使用 vue-router,你不应该增加自己。

    虽然

    import Vue from 'vue'
    
    declare module '*.vue' {
    
      export default Vue
    }
    
    declare module 'vue/types/vue' {
      interface Vue {
        $property1: number;
      }
    }
    

    应该是正确的做法

    【讨论】:

    • 所以我的语法对你来说是正确的?那正是我所想。我想知道为什么它不起作用...
    • 不好看不,Vue是在上面导入的。不在第一个声明中
    • 哦,我会试试的。谢谢!
    猜你喜欢
    • 2017-04-05
    • 2023-01-21
    • 2018-11-17
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2019-10-05
    相关资源
    最近更新 更多