核心结论
React 状态归约器的类型设计应同时约束动作形状、互斥状态和迁移结果。基础方案是分别使用判别联合描述动作与状态,在归约器中根据判别字段分支,并通过 never 完成穷尽检查。这样可以防止动作名称与载荷错配,也能避免用多个布尔值和可选字段构造出相互矛盾的状态。但若某些动作只允许在特定状态发生,一个接收全部状态和全部动作的普通归约器签名仍包含非法组合;这类约束需要状态专属命令、分层分发接口或运行时迁移规则进一步保证。
底层机制
动作应把名称和对应载荷放在同一个联合成员中:
type State =
| { status: "idle" }
| { status: "load