【发布时间】:2018-09-06 02:53:15
【问题描述】:
在 Vue 中,我们有这种类型:
Vue.$refs: {
[key: string]: Vue | Element | Vue[] | Element[];
}
我有一个第三方库 (vuelidate),它为所有 Vue.js 添加了 $v 属性。它没有定义类型,所以我自己做。
declare module 'vue/types/vue' {
interface Vue {
$v: any
}
interface Element {
$v: any
}
}
当我尝试像这样在 $refs 上使用 $v 时,打字稿会抱怨:
this.$refs.form.$v
结果
Property '$v' does not exist on type 'Vue[]'.
这对我来说很有意义。但是,没有意义的是如何向 Vue[] 和 Element[] 添加属性以便编译此代码。
我已经翻阅了文档 Stack Overflow,您可以命名它,但我找不到解决此问题的方法。如何将类型添加到特定数组?
我明白为什么这不起作用:
interface Vue[] {
$v: any
}
但我不知道如何解决它。
【问题讨论】:
-
数组必须用数字键访问;例如,您必须使用
this.$refs.form[0].$v -
@ExplosionPills 这个想法不错,但是联合类型是
Vue | Element | Vue[] | Element[],这意味着一些潜在类型没有索引签名。 -
在这种情况下,我认为您将不得不转换为您当时需要的类型
-
是的,我也猜你将不得不使用
(this.$refs.form as Vue).$v -
谢谢,成功了。我肯定是想多了这个问题!
标签: typescript