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

Redux Toolkit中TypeScript报错:修改函数参数state属性

解决Redux Toolkit中TypeScript错误:Assignment to property of function parameter 'state'

这个错误的核心原因是你手动给state标注了LoginState类型,但Redux Toolkit通过Immer处理后的state实际是WritableDraft<LoginState>(可写的草稿类型),直接标注原始类型会让TypeScript认为state是不可变的,从而触发赋值错误。

解决方案1:让createSlice自动推导state类型(推荐)

去掉state参数的手动类型标注,createSlice会根据initialState自动推断出正确的WritableDraft<LoginState>类型:

const userSlice = createSlice({
  name: 'user',
  initialState,
  reducers: {},
  extraReducers: builder => {
    builder
      .addCase(authUser.pending, (state) => {
        state.loading = 'pending';
      })
      .addCase(authUser.rejected, (state, action) => {
        state.loading = 'failed';
        console.log('action', action);
      });
  },
});

解决方案2:手动标注正确的WritableDraft类型

如果你需要显式标注类型,需导入WritableDraft并使用它:

import { createSlice, WritableDraft } from '@reduxjs/toolkit';

// ...

const userSlice = createSlice({
  name: 'user',
  initialState,
  reducers: {},
  extraReducers: builder => {
    builder
      .addCase(authUser.pending, (state: WritableDraft<LoginState>) => {
        state.loading = 'pending';
      })
      .addCase(authUser.rejected, (state: WritableDraft<LoginState>, action) => {
        state.loading = 'failed';
        console.log('action', action);
      });
  },
});

额外检查:tsconfig配置

如果你的项目启用了no-param-reassign规则,可能也会触发这个错误。可以在tsconfig.json中禁用该规则,或者在相关代码行添加// @ts-ignore注释(不推荐),但更推荐使用前两种方案,因为它们符合Redux Toolkit的类型设计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:30:55