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

如何避免TypeScript中结构一致、名称不同的接口重复定义?

解决方案

方案1:使用类型别名(Type Alias)

用类型别名复用Offer的结构,同时保留Bid和Ask的语义,这种方式不会触发ESLint的空接口报错:

interface Offer {
  price: number
  amount: number
}

type Bid = Offer;
type Ask = Offer;

类型别名只是对原有类型的引用,完全保留Offer的结构,同时Bid和Ask的语义清晰,贴合金融场景的命名习惯。

方案2:局部禁用ESLint规则

如果坚持要用接口继承的方式,可以在空接口上方添加ESLint禁用注释,精准跳过这条规则的检查:

interface Offer {
  price: number
  amount: number
}

// eslint-disable-next-line @typescript-eslint/no-empty-interface
interface Bid extends Offer {}
// eslint-disable-next-line @typescript-eslint/no-empty-interface
interface Ask extends Offer {}

这种方式既保留了接口继承的结构形式,又避免了ESLint报错,适合需要维持接口语法的场景。

方案3:添加标记性属性(推荐进阶用法)

给空接口添加一个可选的标记属性,既解决ESLint报错,还能在后续需要区分类型时派上用场:

interface Offer {
  price: number
  amount: number
}

interface Bid extends Offer {
  readonly type?: 'bid';
}
interface Ask extends Offer {
  readonly type?: 'ask';
}

这个可选的type属性不会影响现有代码的使用,同时在需要类型守卫区分Bid和Ask时,能直接利用这个属性做判断,比如:

function isBid(offer: Bid | Ask): offer is Bid {
  return offer.type === 'bid';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:02:39