嘿,我正在 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">”
上声明
感谢您的帮助:)
不幸的是
useFieldArray
仅支持对象数组。如果您将选项更改为对象数组,它将起作用:
export const PollValidation = z.object({
options: z
.array(
z.object({
value: z.string()
})
)
})
您还可以在 他们的 github
上找到这个问题