vue中的Typescript - 类型'Vue |上不存在属性'validate'元素| Vue [] |元件[]'。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue中的Typescript - 类型'Vue |上不存在属性'validate'元素| Vue [] |元件[]'。相关的知识,希望对你有一定的参考价值。

我这样创造了v-form

<v-form ref="form" v-model="valid" lazy-validation>
  ...
  <v-btn
     :disabled="!valid"
     @click="submit"
   >
     submit
   </v-btn>
</v-form>

脚本:

if (this.$refs.form.validate()) // Error is in here

如果我只是console.log(this.$ref.form),validate()函数可用。但为什么这个错误在建设时会出现?

答案

Vue模板语法中,可以在ref实例或DOM元素上使用Vue属性。如果在ref循环中使用v-for,则会检索Vue实例或DOM元素的数组。

这就是为什么this.$refs可以返回Vue | Element | Vue[] | Element[]

为了让TypeScript知道正在使用哪种类型,应该使用该值。

人们可以这样做:

(this.$refs.form as Vue).validate()(<Vue>this.$refs.form).validate()

我们把它投到Vue,因为v-formVue实例(组件)而不是Element

我个人的偏好是创建一个计算属性,它返回已经铸造的Vue实例或DOM元素。

即。

computed: {
  form(): Vue {
    return this.$refs.form as Vue
  }
}

然后就像这样使用它:this.form.validate()

另一答案
let form: any = this.$refs.form
if(form.validate){}

以上是关于vue中的Typescript - 类型'Vue |上不存在属性'validate'元素| Vue [] |元件[]'。的主要内容,如果未能解决你的问题,请参考以下文章

vue-type-check: Vue 模板中的 Typescript 类型检查

基于 Vue 3 Typescript 的项目中的类型问题

vue3+typescript实战记录二(typescript-eslint)

使用 Typescript 在 Vue 3 中的函数上缺少返回类型

VS Code 中的 Vue Array Prop JSDoc TypeScript 错误:“ArrayConstructor”类型缺少“MyCustomType []”类型中的以下属性

TypeScript在Vue3.0的Ref类型中的实践