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

如何在TypeScript中声明含动态嵌套对象的数组?

TypeScript动态键对象的类型声明方案

首先要纠正一个语法问题:你写的[branch_a: { holidays: [] }, branch_b: { holidays: [] }]不符合JS/TS的数组语法——数组只能使用数字索引,不能用branch_a这类字符串作为键。你实际需要的是带动态字符串键的对象,正确结构应该是:

{
  branch_a: { holidays: [] },
  branch_b: { holidays: [] }
}

接下来是正确的类型声明步骤:

  1. 先定义单个分支的类型
// 单个分支的结构:包含一个存储日期字符串的holidays数组
type Branch = {
  holidays: string[];
};
  1. 声明动态键的对象类型
    有两种常用方式,效果一致:
  • 方式一:使用Record工具类型
    Record<K, T>用于描述“键为K类型、值为T类型”的对象,这里K是任意字符串,T是上面定义的Branch:
type Branches = Record<string, Branch>;
  • 方式二:使用索引签名
    直接通过索引签名定义任意字符串键对应的类型:
type Branches = {
  [key: string]: Branch;
};

你的尝试问题分析

你之前写的Record<"holidays", holiday_ar> & Record<string, holiday_ar>逻辑有误:这个类型试图表示“同时有固定键holidays(值为字符串数组)和任意字符串键(值为字符串数组)”的对象,但这和你实际需要的“每个键对应一个包含holidays数组的对象”结构不匹配,所以方向错了。

使用示例

// 符合类型的对象实例
const companyHolidays: Branches = {
  branch_a: { holidays: ["2024-01-01", "2024-04-04"] },
  branch_b: { holidays: [] },
  branch_c: { holidays: ["2024-10-01"] }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:17:08