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

如何在TypeScript联合类型中排除某类的所有子类类型?

在TypeScript联合类型中移除继承自特定类的类型

你可以通过条件类型实现这个需求,核心思路是遍历联合类型的每个成员,判断其是否继承自目标类,将符合条件的类型替换为never(never在联合类型中会被自动剔除)。

具体实现如下:

class Failure {}
class ParseFailure extends Failure {}
class ExecutionFailure extends Failure {}

type Success = { ok: true }
type ExecutionResult = Success | ParseFailure | ExecutionFailure

// 定义排除逻辑
type ExcludeFailures<T> = T extends Failure ? never : T

// 验证结果:ExcludeFailures<ExecutionResult> 类型等价于 Success
type Result = ExcludeFailures<ExecutionResult> // Result 的类型是 { ok: true }

原理说明

  • TypeScript 的条件类型会自动分发到联合类型的每个成员上,相当于对Success、ParseFailure、ExecutionFailure分别执行判断逻辑。
  • 对于ParseFailure和ExecutionFailure,它们的实例类型都继承自Failure,所以会被替换为never。
  • 联合类型中的never会被自动忽略,最终只剩下Success类型。

内容的提问来源于stack exchange,提问作者Duma - Stefano Gombi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:25:30