You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从现有实体推断Redux子Store分组的带Payload的完整动作映射?

问题:在复合Redux Store中自动推断子Store对应的Action类型映射

摘要:在复合Redux Store中,能否从已有实体(如类型化的store实例、各子Store的action模块)自动推断出包含所有子Store及其对应action(含参数类型)的ActionsMap类型,无需手动重复维护关联关系?


场景与目标

我已经搭建了一个包含多个子Store的Redux Store,核心action如下:

  • setAppLoading(isLoading: boolean):用于更新state.app.loading为传入的布尔值
  • setUserName(name: string | null):用于更新state.user.name,支持传入null(比如用户未登录时)
  • logOut():执行API操作后,调用setUserName(null)完成登出

我希望自动推断出如下结构的ActionsMap类型,避免手动重复定义导致漏写:

interface ActionsMap {
  app: {
    setAppLoading(isLoading: boolean): void
  }
  user: {
    setUserName(name: string | null): void
    logOut(): void
  }
}

现有条件

  1. 已类型化的Store实例:通过configureStore()和combineReducers()创建的store已正确类型化,并且能从中推断出所有子Store的名称:
type State = ReturnType<typeof store.getState>

// 过滤掉内部的`$CombinedState`键,得到子Store名称集合
type SubStoreName = Extract<keyof State, string>
  1. 独立的Action模块:每个子Store的action都单独维护在模块中,已正确类型化,可直接用于dispatch:
import * as appActions from 'store/app/actions'
import * as userActions from 'store/user/actions'

dispatch(appActions.setAppLoading(true))
dispatch(userActions.logOut())

当前方案与痛点

我目前能实现目标的最接近方案是手动创建一个actionsMap对象,再通过它推断类型:

const actionsMap = {
  app: appActions,
  user: userActions,
} satisfies Record<SubStoreName, unknown>

type ActionsMap = typeof actionsMap

但这个方案需要手动将每个子Store的action模块添加到actionsMap中,属于重复维护的工作,很容易出现新增action模块后忘记同步到actionsMap的情况。

请问有没有办法从现有实体自动推断出目标的ActionsMap类型,无需手动维护这个映射对象?


内容的提问来源于stack exchange,提问作者Parzh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:22:37