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

如何用两个TypeScript联合类型生成指定结构的索引签名类型

实现方案

要实现按联合类型顺序一一映射为键值对应的对象类型,需要先借助工具类型把联合类型按稳定顺序转为元组,再按索引匹配键值:

完整代码实现

// 联合类型转有序元组工具类型(TS4.0+支持字面量联合顺序稳定)
type UnionToTuple<T, U = T> = 
  [T] extends [never] 
    ? [] 
    : T extends any 
      ? [T, ...UnionToTuple<Exclude<U, T>>] 
      : never

// 目标泛型类型A的实现
type A<K extends PropertyKey, V> = {
  [Index in keyof UnionToTuple<K> as UnionToTuple<K>[Index]]: UnionToTuple<V>[Index]
}

效果测试

代入你给出的类型验证:

type key = "a" | "b" | "c"
type value = 1 | 2 | 3

// 最终生成的Result类型等价于 {a:1, b:2, c:3}
type Result = A<key, value>

注意事项

该实现仅适用于两个联合类型长度相等的场景,依赖TypeScript同类型字面量联合的排序稳定特性,如果联合长度不一致,超出长度的键对应的值会为undefined类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:27:03