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

使用Redux Toolkit+TypeScript时,无载荷动作该用什么类型?

答:PayloadAction<void> 完全是正确的解决方案!

没错,对于当前无载荷但未来可能需要扩展载荷的Redux Toolkit动作,PayloadAction<void>就是最贴合你需求的类型选择。

为什么它合适?

Redux Toolkit的PayloadAction泛型专门支持传入void类型,用来明确标记该动作当前没有有效载荷。这种写法有两个核心优势:

  1. 保持了和有载荷动作一致的类型结构,未来扩展时成本极低——只需要把void替换成你需要的载荷类型(比如PayloadAction<{value: number}>),不需要修改类型定义的整体结构。
  2. 自动生成的动作创建函数会适配这个类型:调用时不需要传参数(SOME_ACTION()),完全符合无载荷动作的使用习惯。

修正后的代码示例

import { createSlice, PayloadAction } from "@reduxjs/toolkit";

// 用PayloadAction<void>标记无载荷动作
type SOME_ACTION = PayloadAction<void>;

const SOME_SLICE = createSlice({
  name: "SOME_SLICE",
  initialState: getInitialState(),
  reducers: {
    SOME_ACTION(state, action: SOME_ACTION) {
      // 当前无需使用payload,未来需要时直接修改泛型即可
      state.loading = true;
    }
  }
});

对比其他可选方案

如果你直接使用Action类型(从@reduxjs/toolkit导入的基础动作类型),虽然也能表示无载荷动作,但它的结构和PayloadAction不一致——Action仅包含type字段,而PayloadAction<void>会保留payload字段(类型为undefined)。当未来需要添加载荷时,你需要把类型从Action改成PayloadAction<NewType>,反而增加了代码调整的成本。

所以PayloadAction<void>是兼顾当前需求和未来扩展性的最优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:38:11