获取 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>; 部分内部获取 StructureElementFetchedState 等等。

我怎样才能做到这一点?

或者有没有更好的方法来获取组合状态类型?它必须自动完成。我不想在应该自动生成的两个地方更改类型。

如果我试试这个:

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,
});

其中 pokemonStatepokemonTrainerState 是每个特征的类型。
然后我会在任何需要的地方使用 RootState

好吧,我是愚蠢的。我从基本设置中得到了类似的东西:

export type RootState = ReturnType<typeof store.getState>;

它似乎可以解决问题。