【问题标题】:How to infer a type on only one deconstructed variable from an object如何从对象中仅推断一个解构变量的类型
【发布时间】: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


【解决方案1】:

你不能使用一个额外的变量吗?

export const AddAdminDialog: FC<IProps> = (props) => {
  const {inputFields, setInputFields, inputProps} = useForm(initialInputData);
  const aux = inputFields as XXX;  // CAN'T YOU DO THIS?
}

【讨论】:

  • 其实我没想到。我一直在寻找一种解决方案,但这很好用!谢谢~
猜你喜欢
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2022-11-30
  • 1970-01-01
相关资源
最近更新 更多