【发布时间】:2020-12-03 15:20:30
【问题描述】:
我有一个名为 useReduxState 的钩子,我用它来从 Redux 中检索一段状态:
const STATE_A = useReduxState("STATE_A");
我在向其中添加 Typescript 时遇到了麻烦。
这些是我正在使用的类型:
type TYPE_A = {
fooA: string,
barA: string,
}
type TYPE_B = {
fooB: string,
barB: string
}
interface REDUX_STATE {
STATE_A: TYPE_A,
STATE_B: TYPE_B,
}
这是钩子的代码(它使用来自react-redux 包的useSelector 钩子);
function useReduxState(STATE_NAME: REDUX_STATE_KEYS): REDUX_STATE_VALUES {
const STATE = useSelector((state: REDUX_STATE) : REDUX_STATE_VALUES => state[STATE_NAME]);
return STATE;
}
我的目标是能够写出如下内容:
const { fooA, barA } = useReduxState("STATE_A");
我希望 Typescript 知道我可以访问这两个属性 fooA and barA,因为它们存在于 TYPE_A 中,这是 STATE_A 的类型。
但我遇到了这些错误:
Property 'fooA' does not exist on type 'REDUX_STATE_VALUES'.ts(2339)
Property 'barA' does not exist on type 'REDUX_STATE_VALUES'.ts(2339)
这里是REDUX_STATE_VALUES的类型
看起来是正确的,但我想让 Typescript 知道当我将"STATE_A" 作为参数传递时,返回类型应该是TYPE_A,所以我可以访问它的属性fooA and barA。 "STATE_B" 及其类型反之亦然。
我怎样才能做到这一点?在这种情况下我应该使用泛型来获得这种行为吗?
【问题讨论】:
标签: reactjs typescript redux typescript-typings