首页 > 解决方案 > 在 combineReducers - Redux - Typescript 中按名称对 reducer 键进行排序

问题描述

我有很多 redux reducer,它们在发送到 store 之前传递给 combineReducers。在 js 中,我通常会执行以下操作并对其进行排序。请注意,这里的减速器是虚拟的。

const reducers = {
    router: connectRouter(history),
    ...c,
    ...d,
    ...a,
}

export default combineReducers(
    Object.keys(reducers)
    .sort()
    .reduce((acc, cur) => ({ ...acc, [cur]: reducers[cur] }), {})
);

但是在打字稿中,如果我尝试做同样的事情,我实际上会遇到很多错误。

export default combineReducers<RootState, RootAction>(
    Object.keys(reducers)
    .sort()
    .reduce((acc, cur) => ({ ...acc, [cur]: reducers[cur] }), {})
);

错误是

TS2345:“{}”类型的参数不可分配给“ReducersMapObject<RootState, PayloadAction<"@user/setCurrentUser", ADUser> 类型的参数 | PayloadAction<"@profile/setProfile", Profile> | PayloadAction<"@client/setClients", ClientMap> | ... 81 更多... | 有效载荷动作<...>>'。类型“{}”缺少类型“ReducersMapObject<RootState, PayloadAction<"@user/setCurrentUser", ADUser> 中的以下属性 | PayloadAction<"@profile/setProfile", Profile> | PayloadAction<"@client/setClients", ClientMap> | ... 81 更多... | PayloadAction<...>>':currentUser、profile、clients、models 和其他 22 个。

请指教。

标签: typescriptsortingreduxredux-reducers

解决方案


修复它使用

const sortedReducers = Object.keys(reducers)
  .sort()
  .reduce((acc, cur) => ({ ...acc, [cur]: reducers[cur] }), {});

export default combineReducers<RootState, RootAction>(
  sortedReducers as typeof reducers
);

推荐阅读