【问题标题】:Vue.js, Typescript and VeeValidate typingVue.js、Typescript 和 VeeValidate 打字
【发布时间】:2020-02-01 23:01:37
【问题描述】:

我正在尝试构建一个使用 Typescript 严格键入的 vue.js 项目。

我使用 VeeValidate 来构建一个表单。我使用对 VeeValidate ValidationObserver 的引用来处理提交的表单。 我也使用 vue-class-component。

这是我尝试在代码中键入 ValidationObserver 组件的方式。

<template>
  <ValidationObserver tag="form" ref="repertoireForm" @submit.prevent="submitForm">
    <ValidationProvider rules="required"></ValidationProvider>
  </ValidationObserver>
</template>


<script lang="ts">

import Vue from 'vue';
import Component from 'vue-class-component';
import {ValidationObserver, ValidationProvider} from 'vee-validate';

@Component({
  components: {
    ValidationObserver,
    ValidationProvider,
  },
})
export default class RepertoireForm extends Vue 
  $refs!: {
    // here is what I'm trying to type
    repertoireForm: ValidationObserver,
  }

  async submitForm(e: Event): Promise<void> {
    const valid = await this.$refs.repertoireForm.validate();

    // some submit routine here
  }
}
</script>

当我尝试编译它时,我得到了以下错误:

TS2749:“ValidationObserver”指的是一个值,但被用作 在这里输入。

我怎样才能正确输入这个 repertoireForm $refs ?

【问题讨论】:

    标签: typescript vue.js vee-validate


    【解决方案1】:

    您想要的导入实际上是 ValidationProviderInstanceValidationObserverInstance,因为没有 Instance 这些是指组件。

    import { ValidationProviderInstance, ValidationObserverInstance } from 'vee-validate'
    

    然后:

    const valid = await (this.$refs.repertoireForm as ValidationObserverInstance).validate()
    

    编辑

    v3 改变了一些事情。您现在可以使用InstanceType

    $refs!: {
        validationProviderRef: InstanceType<typeof ValidationProvider>,
        validationObserverRef: InstanceType<typeof ValidationObserver>
    }
    

    【讨论】:

    • 这不起作用(版本3.2.3)。 ValidationProviderInstanceValidationObserverInstance 不是 vee-validate 的导出成员。
    • @Sebastian 谢谢。我的回答对 v2 是正确的。我现在还为 v3 添加了正确的类型。
    • 太棒了,有帮助!
    猜你喜欢
    • 2020-07-23
    • 2019-11-14
    • 2019-03-29
    • 2019-07-23
    • 2021-02-05
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多