You need to enable JavaScript to run this app. TypeScript如何从对象联合类型中按属性值筛选提取子类型
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript如何从对象联合类型中按属性值筛选提取子类型

结论

TypeScript 完全支持通过过滤逻辑从联合类型生成新类型,不需要手动重复枚举联合成员。

实现代码

直接使用内置的Extract工具类型即可完成目标:

// 提取NotificationState中所有kind为"dynamic"的成员
type DynamicNotificationState = Extract<NotificationState, { kind: "dynamic" }>;

生成的类型和你手动定义的预期DynamicNotificationState结构完全一致。

实现原理
  • 该能力基于TypeScript的分布式条件类型特性实现
  • Extract的原生定义为:type Extract<T, U> = T extends U ? T : never
  • 当T传入联合类型时,条件判断会自动拆解为对每一个联合成员的单独校验:匹配规则的成员会被保留,不匹配的成员会被判定为never,最终从联合结果中被自动剔除
维护收益

这种推导式的类型会和原NotificationState保持自动同步:后续给原联合新增任意kind: "dynamic"的成员时,DynamicNotificationState不需要手动修改就会自动包含这些新增内容,避免了多份类型手动维护导致的不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 09:54:07