useFieldArray 不可分配给类型 never

问题描述 投票:0回答:1

嘿,我正在 React 中的 useForm 的帮助下构建一个动态表单。不知怎的,我有一个无法修复的打字稿错误,即使有很多示例代码和文档也是如此。 我构建了一个 zod 验证文件。看起来像这样:

import { z } from "zod";

export const PollValidation = z.object({
  text: z
    .string()
    .min(5, { message: "Minimum 5 characters." })
    .max(400, { message: "Maximum 400 characters." }),
  options: z
    .array(
      z
        .string()
        .min(5, { message: "Minimum 5 characters per option." })
        .max(400, { message: "Maximum 400 characters per option." })
    )
    .min(2, { message: "At least 2 options are required." }),
});

我正在使用 useForm 和 useFieldArray :

const form = useForm<z.infer<typeof PollValidation>>({
    resolver: zodResolver(PollValidation),
    defaultValues: {
      text: poll ? poll?.text : "",
      options: ["Option 1", "Option 2"]
    },
  });

  const { fields, append, remove } = useFieldArray<
    z.infer<typeof PollValidation>
  >({
    control: form.control,
    name: "options" as const,
  });

实际上代码和我的表单正在按预期运行,但是当我设置字段数组的名称时:

name: "options" as const,

我收到此错误:

类型“选项”不可分配给类型“从不”。

fieldArray.d.ts(6, 5):预期类型来自属性“name”,该属性在类型“UseFieldArrayProps<{ text: string; options: string[]; }, never, "id">”

上声明

感谢您的帮助:)

reactjs forms next.js
1个回答
0
投票

不幸的是

useFieldArray
仅支持对象数组。如果您将选项更改为对象数组,它将起作用:

export const PollValidation = z.object({
    options: z
        .array(
            z.object({
                value: z.string()
            })
        )
})

您还可以在 他们的 github

上找到这个问题
© www.soinside.com 2019 - 2024. All rights reserved.