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

问题描述 投票:0回答:1

我有一个名为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。

reactjs typescript type-inference
1个回答
0
投票

算了,我真笨。我意识到我可以直接使用 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
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.