输入名称上的 React 挂钩形式 useFieldArray 打字稿错误

React hook form useFieldArray typescript error on input name

我已经用打字稿为动态表单编写了以下内容

type FormData = {
    name: string,
    session: { name: string }[]
}

...

const { control, register, handleSubmit } = useForm<FormData>()
const { fields, insert, remove, move, append } = useFieldArray({
    control,
    name: "session",
    keyName: "id"
})

...

{
    fields.map((field, index) => {
        return <div key={field.id}>
            <div>
                <label>Session {index}</label>
                <input type={"text"} {...register(`session.${index}.name`)} />
            </div>
        </div>
    })
}


我在 {...register(session.${index}.name)}

部分收到错误

Argument of type 'string' is not assignable to parameter of type '"session" | "name" | session.${number} | session.${number}.name' ts(2345)

当我不传入 FormData 时错误消失

const { control, register, handleSubmit } = useForm()

在 v7 中,register() 接受文字(精确的字符串值)而不是字符串。因此,将您的代码更改为:

<input type={"text"} {...register(`session.${index}.name` as const)} />

避免类型扩大。参见 const assertions

相关问题:

  • Argument of type 'string' is not assignable to parameter of type '`${string}` | `${string}.${string}` | `${string}.${number}`'