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

如何在TypeScript中翻转字面量记录类型的键与值?

在TypeScript中实现字面量记录类型的键值互换

要实现字面量记录类型的键值互换,我们可以利用TypeScript的映射类型键重映射特性(TypeScript 4.1+支持),编写一个通用的Flip类型工具。

基础实现

type Flip<T extends Record<string, string | number | symbol>> = {
  [K in keyof T as T[K]]: K;
};

代码解释

  • 类型约束:T extends Record<string, string | number | symbol>确保输入类型T的键和值都是合法的对象键类型(字符串、数字、符号),保证互换后的值能作为新的对象键。
  • 键重映射:[K in keyof T as T[K]]遍历原类型T的每个键K,将新类型的键替换为原键对应的值T[K]。
  • 值映射:新类型中每个键对应的值就是原类型的键K。

示例验证

type Foo = { x: "a", y: "b", z: "c" };
type Bar = Flip<Foo>; // 结果为 { a: "x", b: "y", c: "z" }

处理重复值的情况

如果原类型中存在重复的值,TypeScript会自动将对应原键合并为联合类型:

type DuplicateValue = { x: "a", y: "a" };
type FlippedDuplicate = Flip<DuplicateValue>; // 结果为 { a: "x" | "y" }

注意事项

  • 仅支持值为字符串、数字、符号的记录类型,复杂类型(如对象、数组)无法作为对象键,会触发类型错误。
  • 需要TypeScript 4.1及以上版本才能使用键重映射语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:04:57