typescript - 在 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 个。
请指教。
解决方案
修复它使用
const sortedReducers = Object.keys(reducers)
.sort()
.reduce((acc, cur) => ({ ...acc, [cur]: reducers[cur] }), {});
export default combineReducers<RootState, RootAction>(
sortedReducers as typeof reducers
);
推荐阅读
- sql-server - 链接服务器阻止 T-SQL 查询使用并行执行计划?
- nginx - 在反向代理 nginx 上未显示节点红色 UI
- ios - 具有默认 nil 值的 UIDatePicker - iOS
- c++ - 如何检查模板参数是否为给定值?
- vb.net - 我不断收到电子邮件的第一场比赛的“真实”声明,其余的都是“虚假”
- java - 如何覆盖嵌入列的属性是超类
- c# - 为什么 Session.Clear() - 不起作用?
- java - WEB-INF 中相同 groupId 和 artifactId 的多个 jar
- maven - IntellJ IDEA - Maven - 无法解决 OSGi 捆绑包依赖性
- r - 命名数组的列和行(在语法中使用 'dimnames =' 参数)