【发布时间】:2021-08-16 12:11:06
【问题描述】:
我有一个 useForm 钩子,它接受一个对象并返回几个有用的函数,包括该对象作为状态。 但是,由于 useForm 钩子接受动态对象,由于打字稿的限制,它不能从初始对象返回特定类型
export const useForm = (initialInputData: DynamicForm) => {
//...
return {inputFields, setInputFields, inputProps, resetFields, setInputField} as const;
}
如您所见,useForm 返回 5 个变量。 setInputFields、inputProps、resetFields、setInputField 以正确的类型返回,因为它们不接受动态类型
但是,inputFields 是动态生成的,当我使用钩子时,我需要在每个功能组件中推断出正确的类型。
export const AddAdminDialog: FC<IProps> = (props) => {
//I only want to infer type on inputFields (inputFields gets the correct type, but typescript wants me to do that to other variables too), and not other fields as they are already properly typed.
const {inputFields, setInputFields, inputProps} : {inputFields: typeof initialInputData} = useForm(initialInputData);
我怎样才能只推断一个解构变量的类型而不调用 useForm 两次并且不推断其他已经键入的变量的类型?
当 useQuery 钩子还返回一个动态数据时,它如何与 useQuery() 一起做呢?
请告诉是否还有其他方法可以实现这一点:)
【问题讨论】:
-
你在第一个位置输入什么?在您键入 assert 它为
typeof initialInputData之前是any吗?为什么不创建一个额外的变量,将inputFields分配给它并声明它的类型? -
它被键入为任何字符串和已知属性的记录。由于钩子可以接受多个不同的初始输入字段,因此我需要在钩子返回该变量后为该特定功能组件添加正确的类型。
标签: reactjs typescript react-hooks