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

TypeScript中如何定义兼容对象与数组的类型?

解决方案:定义兼容对象与数组的TypeScript类型

你的核心需求是创建一个无需类型检查/断言、可直接用?.访问的混合类型,同时解决原方案中"数字索引签名缺失"的报错。以下是修正后的实现:

修正后的类型定义

type ArrayOrObject<T> = Partial<T> & {
  // 添加可选数字索引签名,值允许为T的属性值或undefined
  [index: number]: T[keyof T] | undefined;
};

关键说明

  1. 解决索引签名报错:原方案中Partial<Array<T>>会引入数组的必选数字索引要求,而普通对象无此签名。这里的[index: number]: ... | undefined是可选索引(因为允许undefined),普通对象可直接兼容。
  2. 适配?.访问:Partial<T>将对象的所有属性设为可选,结合可选数字索引,不管变量是对象还是数组,都能直接用?.安全访问属性或索引。
  3. 兼容低版本TS:该方案支持TS 4.4.4,无需升级到支持satisfies的版本。

使用示例

interface Order {
  id: string;
  amount: number;
}

// 赋值为对象
const singleOrder: ArrayOrObject<Order> = { id: "ORD-001", amount: 99 };
console.log(singleOrder.amount?.toFixed(2));

// 赋值为数组
const orderList: ArrayOrObject<Order> = [
  { id: "ORD-002", amount: 199 },
  { id: "ORD-003" }
];
console.log(orderList[1]?.id);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:25:41