Property '$router' does not exist on type

发布于 2022-09-06 11:26:46 字数 976 浏览 32 评论 0

vue+typescript中,方法里调用this.$router 报错
Property '$router' does not exist on type 'Close'

请问如何解决?

close.vue

<template>
  <div class="close-wrap"
       :class="{'header-close': closeType === 'header'}"
       @click="back">
    <i class="close icon iconfont icon-xiangzuo1"></i>
  </div>
</template>
<script lang="ts">
import {Vue, Component, Prop, Inject} from 'vue-property-decorator'

@Component({})
export default class Close extends Vue {
  // props
  @Prop({default: ''})
  closeType: 'icon'

  // methods
  back(): void{
    console.log(this); // 打印出是Close实例,其上能找到$router属性
    // 这里报错:Property '$router' does not exist on type 'Close'
    this.$router.go(-1);  
  }
}
</script>

// 打印出是Close实例,其上能找到$router属性,并通过原型链往上找也能找到go()
clipboard.png

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

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

发布评论

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

评论(9

静谧幽蓝 2022-09-13 11:26:46

我没用ts写过,其他社区找到个答案
使用了这种方式this['router']


文档里其实有说明的,需要对类型进行补充

vue-shim.d.ts文件

import Vue from 'vue'
import VueRouter from 'vue-router'
import {Route} from 'vue-router'
declare module "*.vue" {
  import Vue from "vue"
  export default Vue
}
// 扩充
declare module 'vue/types/vue' {
  interface Vue {
    $router: VueRouter,
    $route: Route
  }
}

这个时候已经能正确编译了,但是编辑器可能还有红色报错,这个应该的改编辑器的设置(这我不太确定)?

北方。的韩爷 2022-09-13 11:26:46

在其它类(组件)打印this也没有对应配置的$router、和$axios, 使用没问题,但是编译器报错(下划红波浪线)。。。无法解决。。真难用。

clipboard.png

clipboard.png

⒈起吃苦の倖褔 2022-09-13 11:26:46

用一个变量接收 router 在访问 变量里的options 就行了

clipboard.png
我尝试网上搜到的this.$router['option']和this['router']以及interface的方法都还是会红线,借用$ref保红线的解决方法套用,解决了

北方的巷 2022-09-13 11:26:46

导出的时候使用 Vue.extend()创建并导出子类

export default Vue.extend({
    data(){
        return{
            ...
        }
    },
    methods: {
        ...
    }
})
ヤ经典坏疍 2022-09-13 11:26:46

image.png看起来应该是Vetur插件的问题,实际eslint是没问题的。

苍暮颜 2022-09-13 11:26:46

1

//var VueRouter = require ('vue-router')
import Router from 'vue-router'
//Vue.use (VueRouter)
Vue.use(Router)
是否use 

2 这个this.指向什么 俩个方向排查

挽容 2022-09-13 11:26:46

clipboard.png
没什么问题啊,会不会是你的this指向到了你的

clipboard.png

如果没有你 2022-09-13 11:26:46

楼主解决了吗,求方法

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