先看一个例子
type StoreKey = keyof RootState
type StateKey = keyof RootState[StoreKey]
type GetState = (
storeKey?: StoreKey,
stateKey?: StateKey,
) => RootState | RootState[StoreKey] | RootState[StoreKey][StateKey]
如上写法StateKey类型为never。
因为RootState的所有value类型为一个对象,但是这些对象没有共有key,所以never是唯一可能的参数。通过添加泛型,您可以说服Typescript将类型信息保留为所有二级对象各自的属性,这将为您的提供您正在寻找的类型,如下:
type StoreKey = keyof RootState
type GetState = <O extends StoreKey, A extends keyof RootState[O]>(
storeKey?: O,
stateKey?: A,
) => RootState | RootState[O] | RootState[O][A]
参考:为什么Typescript将我的keyof类型强制为never类型,我该如何修复它? - 问答 - 腾讯云开发者社区-腾讯云