Typescript类型体操 - Flip
题目
中文
实现一个 just-flip-object
类型
示例:
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'}
English
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
答案
type Flip<T> = {
[K in keyof T as T[K] extends
| string
| number
| bigint
| boolean
| null
| undefined
? `${T[K]}`
: never]: K;
};