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

如何为指定数据结构创建Redux可用的TypeScript类型并解决相关语法问题?

解决方案

1. 定义正确的TypeScript类型/接口

先为数据结构里的子对象定义接口,再用Record类型描述整个状态结构,满足ESLint对替代索引签名的要求:

// 单个页面控制项的接口
interface PageControl {
  pageId: string;
  rowControls: any[]; // 如果rowControls有固定结构,替换为对应具体类型即可
}

// 整个状态的类型:键为字符串格式的审计ID,值为PageControl数组
type AuditState = Record<string, PageControl[]>;

2. 初始化状态

按照定义好的AuditState类型初始化,无需多余的空字符串键:

const initialState: AuditState = {};

3. 修复Reducer中的语法错误

你之前的reducer写法存在对象扩展语法错误,根据使用场景有两种正确写法:

场景1:使用Redux Toolkit(推荐,内置Immer支持直接修改状态)

Redux Toolkit的Immer允许直接修改state,内部会自动生成不可变副本:

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

const auditSlice = createSlice({
  name: 'audit',
  initialState,
  reducers: {
    setAuditId: (state, action: PayloadAction<string>) => {
      state[action.payload] = [];
    },
  },
});

export const { setAuditId } = auditSlice.actions;
export default auditSlice.reducer;

场景2:纯Redux(手动处理不可变更新)

如果不用Immer,需要手动创建新状态对象,保证不可变性:

function auditReducer(state = initialState, action: PayloadAction<string>) {
  switch (action.type) {
    case 'audit/setAuditId':
      return {
        ...state, // 复制原状态所有属性
        [action.payload]: [] // 新增或更新目标审计ID对应的空数组
      };
    default:
      return state;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:40:30