TypeScript抱怨使用vue-property-decorator定义的现有Vue组件属性

时间:2019-07-26 16:45:16

标签: javascript typescript vue.js tslint

我有一个Vue组件,该组件具有使用装饰器定义的属性:

import { Component, Vue } from "vue-property-decorator"
@Component({
             props: {
               myId: String,
             },
           })
class TestProp extends Vue {
  myFunction(obj: any) {
    return obj[this.myId] // here tslint complains: "Property 'myId' does not exist on type 'TestProp'."
  }
}

我可以通过将this转换为any来避免类型错误:

  myFunction(obj: any) {
    return obj[(this as any).myId]
  }

但这只是解决方法,而不是解决方案。

我猜编译器是否不知道@Component装饰器定义的属性?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我建议您使用以下库:https://github.com/kaorun343/vue-property-decorator

使用此方法,可以在组件类中声明prop。

例如:

import { Vue, Component, Prop } from 'vue-property-decorator'

@Component
class TestProp extends Vue {
  @Prop(String) myId: string!
}

答案 1 :(得分:1)

TypeScript example指出您必须自己在组件中对其进行记录。

从该页面

  // additional declaration is needed
  // when you declare some properties in `Component` decorator
import { Component, Vue } from "vue-property-decorator"
@Component({
  props: {
    myId: String,
  },
})
class TestProp extends Vue {

  myId: string;

  myFunction(obj: any) {
    return obj[this.myId] // here tslint complains: "Property 'myId' does not exist on type 'TestProp'."
  }
}