根据对象从第一个参数推断第二个参数
Infer second parameter from first parameter based on object
我有一个名为 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",并且它已经根据我的界面将我的第二个参数推断为布尔值。
我当前的实现不起作用 - 它推断出每种可能的类型,而不是正确的类型。我也不认为我应该必须通过类型参数,但如果需要,那么确定。
谢谢。
算了,我傻了。我意识到我可以只使用 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
})
}
我有一个名为 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",并且它已经根据我的界面将我的第二个参数推断为布尔值。
我当前的实现不起作用 - 它推断出每种可能的类型,而不是正确的类型。我也不认为我应该必须通过类型参数,但如果需要,那么确定。
谢谢。
算了,我傻了。我意识到我可以只使用 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
})
}