You need to enable JavaScript to run this app. TypeScript使用扩展类时数组类型推断错误问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript使用扩展类时数组类型推断错误问题咨询

这个现象是TypeScript的最佳公共类型推断规则和结构化类型系统共同作用的结果:

  • TypeScript采用结构化类型兼容规则,判断类型是否兼容只看成员结构是否匹配,和名义继承关系无关。你的代码里typeof AnotherAnn的静态defaultValues属性包含id和id2两个字段,typeof YetAnotherAnnotation的静态defaultValues仅包含id字段,前者完全覆盖后者的结构要求,因此typeof AnotherAnn是typeof YetAnotherAnnotation的子类型,可以直接赋值给后者类型的变量。
  • TypeScript推断数组类型时,会自动查找所有数组成员的最佳公共超类型:如果所有成员都能兼容同一个公共类型,就会直接将数组推断为该公共类型的数组,不会自动生成联合类型。
  • 本场景中两个类构造函数的最佳公共类型就是typeof YetAnotherAnnotation,因此变量x的推断类型为(typeof YetAnotherAnnotation)[]。

如果你需要得到预期的联合类型,显式标注变量类型即可:

const x: (typeof AnotherAnn | typeof YetAnotherAnnotation)[] = [AnotherAnn, YetAnotherAnnotation]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:06:11