我有一个名为FormState的接口,我用它来检查我在react中的状态。我试图创建一个函数,它将根据键更新状态,并使用传递的键从接口中自动推断出正确的类型。这是我的接口(和状态供参考)。
interface FormState {
username: string
password: string
auto_login: boolean
access_code: string
method: number
use_proxy: boolean
ignore_invalid_certificates: boolean
}
const [state, setState] = useState<FormState>({
/* state here */
})
和函数:
function updateState<T extends keyof FormState> (key: keyof FormState, value: FormState[T]): void {
setState(old => {
old[key as any] = value
return old
})
}
我希望能够调用这个函数,比如说第一个参数是 "auto_login",然后它已经根据我的接口推断出第二个参数是布尔类型。
我目前的实现并不成功--它推断出每一个可能的类型,而不是正确的类型。我也不认为我应该通过一个类型参数,但如果需要的话,当然可以。
谢谢,我有一个接口,叫做FormState。
算了,我真笨。我意识到我可以直接使用 key: T
而不是 key: keyof FormState
这解决了我的问题。
function updateState<T extends keyof FormState> (key: T, value: FormState[T]): void {
setState(old => {
old[key as any] = value
return old
})
}