根据对象从第一个参数推断第二个参数

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
    })
}