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

为何TypeScript中返回D类型却未触发返回类型不匹配错误?

问题原因解析

这是因为TypeScript采用结构类型系统,而非传统面向对象语言常用的名义类型系统,具体原因如下:

  • TypeScript判断类型兼容性的核心依据是类型的结构是否匹配,而非类的名称或继承关系。
  • 示例中的C和D类结构完全一致:都包含一个类型为number的公共属性p,因此D的实例在结构上完全符合C类型的要求。
  • 当函数createLabel声明返回类型为C时,返回D的实例不会触发类型错误——因为从结构上看,D实例满足C类型的所有约束。

你可以做个验证:如果给其中一个类添加不同属性,比如给D新增q: string,此时返回D实例就会触发类型错误,因为结构不再兼容:

class C {
    p: number = 3;
}
class D {
   p: number = 21321;
   q: string = "test"; // 新增属性
}

function createLabel(nameOrId: number): C {
    let a = new D();
    return a; // 此处会触发类型错误,结构不匹配
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:37:04