我有这个函数useFormState()
,它以类型initialValues
的对象FormType
作为参数。
type FormType = {
email: string;
password: string;
rememberMe: boolean;
}
...
const initialValues: FormType = {
email: '',
password: '',
rememberMe: false,
}
const { values, touched, errors, updateField } = useFormState<FormType, keyof FormType>(initialValues);
函数useFormState()
必须返回包含来自FormType
的键的对象:
touched: {
email: true,
password: false,
rememberMe: false
}
为了能够像这样键入响应,我需要提取“键”类型,因此我将其作为第二个通用类型keyof FormType
传递。
这就是我的问题-有什么方法可以只传递一种类型FormType
并在内部提取键类型?
我的功能定义如下:
const useFormer = <T, K extends keyof T>(props) => {
...
}
我可以完全省略传递的类型,而让TS来推断类型,这有点奏效,但是
T
添加更多属性时,TS会感到困惑并推断错误感觉可以完全推断出第二个K extends keyof T
,但是如果我只传递一个类型参数-TS想要第二个。
有什么方法可以摆脱一个吗?
答案 0 :(得分:1)
findByIdAndUpdate(req.params.id, {
username = req.body.username,
description = req.body.description,
duration = Number(req.body.duration),
date = Date.parse(req.body.date),
},
function(err,docs){
if(err) console.log(err)
else console.log("Updated")
})
这样,您不必对keyof使用泛型,而是在函数返回类型接口中对其进行计算。