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

能否通过编程将接口转换为基于其键的可区分联合类型?

如何定义ToUnion类型将接口转换为可区分联合类型

可以通过TypeScript的映射类型与索引访问类型实现这个需求,以下是具体的ToUnion类型定义:

type ToUnion<T> = {
  [K in keyof T]: { key: K; value: T[K] }
}[keyof T];

工作原理

  1. 映射类型遍历键:[K in keyof T]会遍历输入接口T的所有键名,为每个键K生成对应的对象类型{ key: K; value: T[K] }——K会保留原键的字面量类型,T[K]则取对应键的属性类型。
  2. 索引访问生成联合类型:通过[keyof T]对第一步生成的映射类型进行索引访问,会自动将所有属性值类型合并为一个可区分联合类型。

验证示例

结合你提供的DataShapes接口测试:

interface DataShapes {
  shape1: { a: number };
  shape2: { b: string };
}

type UnionResult = ToUnion<DataShapes>;

此时UnionResult的类型完全符合需求:

{ key: 'shape1', value: { a: number } } | { key: 'shape2', value: { b: string } }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:22:04