在Vue 3和TypeScript中,“formRef.value”可能是“未定义的”

dm7nw8vv  于 2022-12-14  发布在  TypeScript
关注(0)|答案(1)|浏览(2932)

我正在编写一个函数,该函数基于表单获取数据,并使用AntDesign提供的表单,但当我将其与Vue 3和TypeScript一起使用时,它会给出如下错误消息:

  • 常量表单参考:引用〈表单示例|未定义〉*
  • 'formRef.value'可能是'未定义'。ts(18048)*

下面是我的相关代码片段:

模板:

<a-form
        ref="formRef"
        :model="DataCreate"
        name="form_in_modal"
        :validate-messages="validateMessages"
      >
        <a-form-item
          :name="['new', 's3Account']"
          label="s3Account"
          :rules="[{ required: true }]"
        ></a-form-item>
        ...
</a-form>

脚本:

import { ref, h, computed, onMounted, reactive, toRaw } from "vue";
import type { FormInstance } from "ant-design-vue";

const formRef = ref<FormInstance>()
const visibleCreate = ref<boolean>(false)

const CreateConfig = async () => {
  formRef.value.validateFields().then(values => { //Error here
        console.log('Received values of form: ', values);
        console.log('formState: ', toRaw(DataCreate));
        visibleCreate.value = false;
        formRef.value.resetFields();              //Error here
        console.log('reset formState: ', toRaw(DataCreate));
        
      }).catch(info => {
        console.log('Validate Failed:', info);
       
      });
      
};

我在使用TypeScript时遇到了一些问题,希望能得到大家的帮助。非常感谢

s3fp2yjn

s3fp2yjn1#

这是因为在构造时没有给予它一个默认值,因此它的类型被“扩展”为也包括undefined,这是在没有提供任何值时的默认值。
如果这是初始化它所需的方式,可以使用Assert链myRef!.value(这对typescript说“虽然类型说它可以是null或未定义,但它不会,或者如果它确实让它失败了)。
否则,您还可以使用可选的链接myRef?.value(这意味着键入脚本以仅在值既不是null也不是undefined时调用该方法)。

相关问题