如何在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
相关产品推荐
相关产品推荐

