获取 redux 状态的类型
Get the type of redux's state
我想获取 redux 状态的类型,它将用于模拟所述状态。
到目前为止我发现我有这个 Reducer:
(alias) const reducer: {
selectedElement: Reducer<StructureElement, AnyAction>;
fetchedState: Reducer<FetchedState, AnyAction>;
... 10 more ...;
mesApi: Reducer<...>;
}
所以我想做的是以某种方式从 Reducer</here/, AnyAction>;
部分内部获取 StructureElement
、FetchedState
等等。
我怎样才能做到这一点?
或者有没有更好的方法来获取组合状态类型?它必须自动完成。我不想在应该自动生成的两个地方更改类型。
如果我试试这个:
type State = typeof reducer;
我明白了
Type '{ selectedElement: Reducer<StructureElement, AnyAction>; fetchedState: Reducer<FetchedState, AnyAction>; ... 10 more ...; mesApi: Reducer<...>; }' is not assignable to type '{ selectedElement?: { stateId: string; parentId: string; hasChild: boolean; pathList: string[]; name: string; color: string; isActive: boolean; level: number; children?: ...[]; key?: string; type: StateType; }; ... 11 more ...; mesApi?: { ...; }; }'.
Types of property 'selectedElement' are incompatible.
这是有道理的。
我建议简单地对其进行显式建模,然后在需要的地方导入这些类型:
export type UserState = {
readonly isLoggedIn: boolean;
// other user state here
};
// Type for entire global redux state
export type AppState = {
users: UserState;
// other sub-states here
};
我个人为每个我想要的状态创建一个切片,然后我有一个文件,我将首先在其中声明和导出我的 RootState 类型,然后我将组合我的所有减速器。
export interface RootState {
pokemon: pokemonState;
pokemonTrainer: pokemonTrainerState;
}
const reducer = combineReducers<RootState>({
pokemon: pokemonSLice,
pokemonTrainer: pokemonTrainerSlice,
});
其中 pokemonState
和 pokemonTrainerState
是每个特征的类型。
然后我会在任何需要的地方使用 RootState
。
好吧,我是愚蠢的。我从基本设置中得到了类似的东西:
export type RootState = ReturnType<typeof store.getState>;
它似乎可以解决问题。
我想获取 redux 状态的类型,它将用于模拟所述状态。
到目前为止我发现我有这个 Reducer:
(alias) const reducer: {
selectedElement: Reducer<StructureElement, AnyAction>;
fetchedState: Reducer<FetchedState, AnyAction>;
... 10 more ...;
mesApi: Reducer<...>;
}
所以我想做的是以某种方式从 Reducer</here/, AnyAction>;
部分内部获取 StructureElement
、FetchedState
等等。
我怎样才能做到这一点?
或者有没有更好的方法来获取组合状态类型?它必须自动完成。我不想在应该自动生成的两个地方更改类型。
如果我试试这个:
type State = typeof reducer;
我明白了
Type '{ selectedElement: Reducer<StructureElement, AnyAction>; fetchedState: Reducer<FetchedState, AnyAction>; ... 10 more ...; mesApi: Reducer<...>; }' is not assignable to type '{ selectedElement?: { stateId: string; parentId: string; hasChild: boolean; pathList: string[]; name: string; color: string; isActive: boolean; level: number; children?: ...[]; key?: string; type: StateType; }; ... 11 more ...; mesApi?: { ...; }; }'. Types of property 'selectedElement' are incompatible.
这是有道理的。
我建议简单地对其进行显式建模,然后在需要的地方导入这些类型:
export type UserState = {
readonly isLoggedIn: boolean;
// other user state here
};
// Type for entire global redux state
export type AppState = {
users: UserState;
// other sub-states here
};
我个人为每个我想要的状态创建一个切片,然后我有一个文件,我将首先在其中声明和导出我的 RootState 类型,然后我将组合我的所有减速器。
export interface RootState {
pokemon: pokemonState;
pokemonTrainer: pokemonTrainerState;
}
const reducer = combineReducers<RootState>({
pokemon: pokemonSLice,
pokemonTrainer: pokemonTrainerSlice,
});
其中 pokemonState
和 pokemonTrainerState
是每个特征的类型。
然后我会在任何需要的地方使用 RootState
。
好吧,我是愚蠢的。我从基本设置中得到了类似的东西:
export type RootState = ReturnType<typeof store.getState>;
它似乎可以解决问题。