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

TypeScript中使用Spread operator构造联合类型数组报错求助

正确实现IMyType[]转换为(IMyType & ISelectable)[]的方法

你的三种写法都存在问题,导致TypeScript无法正确推断目标类型:

  • 第一种写法把整个dataArray作为数组的一个元素,再拼接单个ISelectable对象,得到的是(IMyType[] | {isSelected: boolean})[],完全不符合需求。
  • 第二种写法将dataArray的元素与单个ISelectable对象拼接,数组元素类型是IMyType | {isSelected: boolean},并非交叉类型。
  • 第三种写法存在语法错误:箭头函数中直接写{isSelected: false, ...x}会被解析为代码块,而非对象字面量,需要用括号包裹对象。

正确语法

方法1:修复map的箭头函数写法(推荐)

const extendedArray = dataArray.map(x => ({ isSelected: false, ...x }));

给对象字面量加上括号()后,TypeScript会自动推断每个返回元素为IMyType & ISelectable,数组类型自然匹配(IMyType & ISelectable)[]。

方法2:显式指定map的返回类型(适合复杂场景)

如果TypeScript无法自动推断,可显式指定map的泛型参数:

const extendedArray = dataArray.map<IMyType & ISelectable>(x => ({
  isSelected: false,
  ...x
}));

方法3:类型断言(不推荐,仅必要时使用)

若上述方法仍不生效,可通过类型断言强制指定数组类型:

const extendedArray = dataArray.map(x => ({ isSelected: false, ...x })) as (IMyType & ISelectable)[];

补充:原接口定义的语法修正

你写的IMyType接口存在语法错误,TypeScript中接口定义无需冒号,正确写法为:

export interface IMyType {
  field1: number;
  field2: number;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:05:19