小编Mar*_*565的帖子

使用 zod 联合模式进行 Typescript React Hook 表单错误处理

我想制作一个动态表单,根据布尔值显示不同的输入字段。

当调用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)

typescript reactjs react-hook-form zod

6
推荐指数
1
解决办法
4387
查看次数

标签 统计

react-hook-form ×1

reactjs ×1

typescript ×1

zod ×1