【问题标题】:Infer second parameter from first parameter based on object根据对象从第一个参数推断第二个参数
【发布时间】:2020-09-24 13:36:44
【问题描述】:

我有一个名为 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”,并且它已经根据我的界面将我的第二个参数推断为布尔值。

我当前的实现不起作用 - 它推断出每种可能的类型,而不是正确的类型。我也不认为我应该传递类型参数,但如果需要,那么当然可以。

谢谢。

【问题讨论】:

    标签: typescript type-inference typescript-generics


    【解决方案1】:

    没关系,我很愚蠢。我意识到我可以只使用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
        })
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-22
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多