这里是 Backbone.js 示例(您也可以在此codesandbox上找到)
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
};
};
字符串
为什么类型FooForm<T>
不能赋值给类型DefaultValues<FooForm<T>>
?如何修复?
1条答案
按热度按时间vd2z7a6w1#
变化
字符串
到
型
useForm
期望基本值类型具有应用于defaultValues
属性的DefaultValues
类型。这是因为defaultValues
可以指定值的 * 子集 *,而不是提供所有值。然而,奇怪的是,
FooForm<T>
并不是DefaultValues<FooForm<T>>
的兼容值。可悲的是,这看起来是因为DeepPartial
在库中的实现方式打破了TS在这些类型之间的推理,它在后台使用。如果你想强制所有的值都提供给
initialFooForm
,你必须让UseFooFormOptions
保持原样,不幸的是,要进行强制转换:型