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

如何在React TypeScript中定义状态使用的特定对象结构?

正确定义React TypeScript中的数字键对象结构

你的问题出在对TypeScript接口索引的理解偏差:你写的number: [{...}]是给对象定义了名为"number"的字符串属性,而非允许用数字类型作为键。要实现数字键对应数组的结构,有两种常用的正确写法:

方式一:用索引签名定义接口

先单独定义数组元素的类型,再通过数字索引签名声明对象结构:

// 定义数组中单个项的类型
interface ListItem {
  foo: string;
  bar: string;
}

// 声明对象允许数字作为键,对应值为ListItem数组
interface NumberKeyedObject {
  [key: number]: ListItem[];
}

// 初始化React状态
const [data, setData] = useState<NumberKeyedObject>({});

方式二:用Record工具类型(更简洁)

利用TypeScript内置的Record工具类型,快速定义键值对结构:

type ListItem = {
  foo: string;
  bar: string;
};

// Record<键类型, 值类型>
type NumberKeyedObject = Record<number, ListItem[]>;

// 初始化状态
const [data, setData] = useState<NumberKeyedObject>({});

使用示例

现在可以正常用数字动态键访问或修改状态:

// 动态键示例
const dynamicKey = 2;

// 读取数据(空数组兜底)
const items = data[dynamicKey] || [];

// 更新数据(向指定键的数组添加新项)
setData(prev => ({
  ...prev,
  [dynamicKey]: [...(prev[dynamicKey] || []), { foo: "新内容", bar: "新描述" }]
}));

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:34:58