如何在TypeScript中声明含动态嵌套对象的数组?
TypeScript动态键对象的类型声明方案
首先要纠正一个语法问题:你写的[branch_a: { holidays: [] }, branch_b: { holidays: [] }]不符合JS/TS的数组语法——数组只能使用数字索引,不能用branch_a这类字符串作为键。你实际需要的是带动态字符串键的对象,正确结构应该是:
{ branch_a: { holidays: [] }, branch_b: { holidays: [] } }
接下来是正确的类型声明步骤:
- 先定义单个分支的类型
// 单个分支的结构:包含一个存储日期字符串的holidays数组 type Branch = { holidays: string[]; };
- 声明动态键的对象类型
有两种常用方式,效果一致:
- 方式一:使用
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
相关产品推荐
相关产品推荐

