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

React中如何为含动态键的JSON定义TypeScript类型?

解决方案

首先定义数组内单个键值对的类型:

type KeyValuePair = {
  key: string;
  value: string;
};

接着定义外层的动态键对象类型——因为你的JSON键是动态字符串,所以用字符串索引签名来匹配任意键名,每个键对应KeyValuePair类型的数组:

type DynamicKeyValueMap = {
  [key: string]: KeyValuePair[];
};

在React中的使用示例

你可以直接用这个类型声明数据变量,或者作为组件的Props类型:

// 声明符合结构的数据
const jsonData: DynamicKeyValueMap = {
  "abc": [
    {"key": "a", "value": "a"},
    {"key": "b", "value": "b"},
    {"key": "c", "value": "c"}
  ],
  "cdf": [
    {"key": "a", "value": "a"},
    {"key": "b", "value": "b"},
    {"key": "c", "value": "c"}
  ]
};

// 作为组件Props类型
type DataComponentProps = {
  data: DynamicKeyValueMap;
};

const DataComponent = ({ data }: DataComponentProps) => {
  // 遍历数据进行渲染
  return (
    <div>
      {Object.entries(data).map(([groupKey, items]) => (
        <div key={groupKey}>
          <h3>{groupKey}</h3>
          {items.map(item => (
            <div key={item.key}>{`${item.key}: ${item.value}`}</div>
          ))}
        </div>
      ))}
    </div>
  );
};

补充:如果键有固定可选范围

如果后续你的动态键其实是有限的已知值(比如只有abc、cdf这类固定键),可以改用映射类型来约束键名:

// 定义所有可能的键名
type AllowedGroupKeys = "abc" | "cdf" | "xyz";

type FixedKeyValueMap = {
  [key in AllowedGroupKeys]: KeyValuePair[];
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:27:09