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

如何从含kind字段的联合类型Cartoon推导新联合类型Animal?

嘿,这个需求TypeScript的类型系统直接就能轻松实现,用索引访问类型就可以,完全不用手动重复定义Animal的取值:

type Cartoon = { kind: 'cat', name: 'Tom'} | { kind: 'mouse', name: 'Jerry' };
// 直接通过索引访问提取所有kind字段的取值联合
type Animal = Cartoon['kind']; // 最终类型就是 'cat' | 'mouse'

为啥这能行?

当你对联合类型使用索引访问(比如Cartoon['kind'])时,TypeScript会自动遍历联合里的每一个成员,把每个成员的kind字段类型都提出来,然后自动组合成一个新的联合类型。

这种写法还有个超大好处:和原类型完全同步。要是以后你给Cartoon加个新成员,比如{ kind: 'dog', name: 'Spike' },Animal会自动变成'cat' | 'mouse' | 'dog',根本不用手动改,避免了重复维护的麻烦。

如果需要在多个地方复用这个逻辑,还可以封装成一个通用工具类型:

// 定义一个通用工具,提取带有kind字段的类型的kind取值
type ExtractKind<T extends { kind: string }> = T['kind'];
// 调用方式
type Animal = ExtractKind<Cartoon>; // 同样得到 'cat' | 'mouse'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:45:48