提问人:Changdae Park 提问时间:11/11/2023 更新时间:11/11/2023 访问量:24
将 react-hook-form 的 useForm 的 defaultValues 设置为通用值时出现类型错误
Type error from setting defaultValues of react-hook-form's useForm to a generic value
问:
下面是主干示例(你也可以在这个代码沙箱上找到它)
import { FieldValues, useForm } from "react-hook-form";
type FooForm<T> = {
name: string;
height: number;
} & T;
type UseFooFormOptions<T> = {
initialFooForm: FooForm<T>;
};
export const useFooForm = <T extends FieldValues>({
initialFooForm
}: UseFooFormOptions<T>) => {
const form = useForm<FooForm<T>>({
// Type 'FooForm<T>' is not assignable to type 'DefaultValues<FooForm<T>>'.ts(2322)
defaultValues: initialFooForm
});
const someOtherReturns = 5;
return {
...form,
someOtherReturns
};
};
为什么 type 不能分配给 type?我该如何解决?FooForm<T>
DefaultValues<FooForm<T>>
答:
1赞
adsy
11/11/2023
#1
改变
type UseFooFormOptions<T> = {
initialFooForm: FooForm<T>;
};
自
import { FieldValues, DefaultValues, useForm } from "react-hook-form";
//...
type UseFooFormOptions<T> = {
initialFooForm: DefaultValues<FooForm<T>>;
};
useForm
期望基值类型具有应用于属性的类型。这是因为可以指定值的子集,而不是提供所有值。DefaultValues
defaultValues
defaultValues
但是,奇怪的是,因此不是 的兼容值。可悲的是,这看起来像是因为在库中实现的方式打破了 TS 在这些类型之间的推理,它在引擎盖下使用了这些类型。FooForm<T>
DefaultValues<FooForm<T>>
DeepPartial
如果你想强制提供所有值,你必须保持原样,不幸的是,做一个强制转换:initialFooForm
UseFooFormOptions
const form = useForm<FooForm<T>>({
defaultValues: initialFooForm as DefaultValues<FooForm<T>>
});
评论