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

TypeScript中&交叉类型与extends接口继承的类型差异疑问

TypeScript交叉类型与接口继承的属性覆盖差异

核心差异结论

  • 交叉类型生成的B中,a的类型是any;接口继承生成的C中,a的类型是number。

具体原因分析

1. 交叉类型的类型合并规则

交叉类型A & {a: number}会合并两个类型的所有成员,当同一属性存在类型冲突时,会计算类型的交集。但any是TypeScript中的特殊类型,它与任何类型的交叉结果始终是any——因为any可以代表任意类型,和其他类型交叉不会限制它的范围。所以A的a: any和{a: number}交叉后,a的类型最终是any & number = any。

2. 接口继承的属性重写规则

接口继承时,子接口可以直接重写父接口的属性类型,只要子类型是父类型的兼容类型(number是any的子类型,满足兼容性要求)。TypeScript会直接使用子接口中定义的属性类型覆盖父接口的对应属性,因此C的a类型就是number。

代码验证

在TypeScript 4.9.5中查看编辑器类型提示即可确认:

  • b.a的类型提示为any
  • c.a的类型提示为number

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:30:01