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

TypeScript合并窄类型与宽类型数组为何丢失宽类型推断信息?

类型推断结果的成因如下:

  1. 首先TypeScript采用结构化类型系统,ItemExist 天然是 ItemNew 的子类型:ItemExist 包含了 ItemNew 要求的所有属性(text: string),因此所有 ItemExist 类型的值都可以被赋值给 ItemNew 类型的变量,二者存在明确的父子类型关系。
  2. TypeScript对数组扩展运算的默认类型推断逻辑是「取两个数组元素类型的公共超类型」,而非直接生成联合类型。在你的场景中ItemNew就是ItemNew和ItemExist的公共超类型,因此合并后的数组直接被推断为ItemNew[],而不是联合类型数组。

如果需要得到Array<ItemNew | ItemExist>的类型,手动标注变量类型即可:

const items: Array<ItemNew | ItemExist> = [...itemsNew, ...itemsExist];

补充验证:如果两个数组的元素类型不存在父子继承关系,比如分别是{a: number}和{b: string},合并后的数组就会被自动推断为联合类型数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:15:01