# 4179-实现Flip
# 题目描述
Implement the type of just-flip-object
. Examples:
Flip<{ a: 'x'; b: 'y'; c: 'z' }>; // {x: 'a', y: 'b', z: 'c'}
Flip<{ a: 1; b: 2; c: 3 }>; // {1: 'a', 2: 'b', 3: 'c'}
Flip<{ a: false; b: true }>; // {false: 'a', true: 'b'}
No need to support nested objects and values which cannot be object keys such as arrays
# 分析
本题是属性值和属性反转,本质也是遍历对象,通过 as 将属性转为属性值即可。
# 题解
type Flip<T> = {
[P in keyof T as T[P] extends boolean | number | string
? `${T[P]}`
: never]: P;
};
这里需要注意的是 as 中的判断,如果 T[P]
是 boolean,number, string,就将其转换成 string,因为 ts 要求属性必须是 string | number | symbole,这里偷了个懒,把所有的类型都转成了字符,也能够满足题目的用例
# 知识点
- 对象遍历,通过 as 修改属性