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

TypeScript中能否用interface继承Bird或Horse任一接口?

TypeScript接口继承联合类型的问题解答

TypeScript 不支持接口直接继承联合类型,你写的interface Animal extends Bird | Horse这种写法会触发编译错误。

原因

接口的extends关键字仅支持继承单个对象类型或多个对象类型的交叉类型(&),不能是联合类型(|)。这是因为接口继承的逻辑是“必须包含被继承类型的所有属性”,而联合类型表示“多个类型中的任意一个”,编译器无法确定要强制Animal包含哪些属性(是flyingSpeed还是runningSpeed?),两者逻辑矛盾。

可行的实现方案

方案1:使用类型别名(最简洁)

直接通过类型别名把联合类型和新增属性交叉:

type Animal = (Bird | Horse) & { name: string };

这样Animal就表示“带name属性的Bird,或者带name属性的Horse”,完全符合你的需求。

方案2:拆分接口再联合(适合需单独扩展的场景)

如果需要给不同动物类型单独添加更多属性,可以先分别定义继承单一类型的接口,再组合成联合类型:

interface BirdAnimal extends Bird {
    name: string;
    // 可在此添加鸟类专属属性
}

interface HorseAnimal extends Horse {
    name: string;
    // 可在此添加马类专属属性
}

type Animal = BirdAnimal | HorseAnimal;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:22:11