我想制作一个动态表单,根据布尔值显示不同的输入字段。
当调用react-hook-form包的useForm时,我使用zod对象来验证我的输入。该对象是另外两个 zod 对象的并集(每个布尔值对应一个对象)。这会导致错误类型仅显示 TypeScript 中的共享选项。
运行代码时一切正常并显示错误。但我仍然不喜欢不再提供类型安全。这个问题有解决办法吗?
import { zodResolver } from "@hookform/resolvers/zod"
import React from "react"
import { useForm } from "react-hook-form"
import { z } from "zod"
const TrueSchema = z.object({
isTrue: z.literal("true"),
trueInput: z.string().min(1, "Required, true"),
})
const FalseSchema = z.object({
isTrue: z.literal("false"),
falseInput: z.string().min(1, "Required, false"),
})
const FormSchema = z.discriminatedUnion("isTrue", [TrueSchema, FalseSchema])
type FormSchemaType = z.infer<typeof FormSchema>
function Example() {
const {
register,
watch,
handleSubmit,
formState: { errors },
} = useForm<FormSchemaType>({
resolver: zodResolver(FormSchema),
defaultValues: …Run Code Online (Sandbox Code Playgroud)