UnionからUnionへの型レベルmap
これは、Unionから、何か計算を施したUnionへのmapと考えると良い

通常のmapは、 [a,b,c]
→ [f a, f b, f c]
だが、
この場合は、 a | b | c
→ f a | f b | f c
というイメージ
U extends U ? f : never
としたとき
例: Union型を、配列のUnion型に変換する
tstype ArrayUnion<U> = U extends U ? U[] : never;
使用例
tstype case1 = ArrayUnion<'a'|'b'>; // "a"[] | "b"[]
type case2 = ArrayUnion<string>; // string[]
type case3 = ArrayUnion<string | number>; // string[] | number[]
type case4 = ArrayUnion<[string | number]>; // [string | number][]
例: recordのUnion型から、keyのUnionに変換する
tstype KeyofUnion<T> = T extends T ? keyof T : never;
使用例
tstype A = { foo: string; };
type B = { bar: number; };
type Keys = KeyofUnion<A | B>; // 'foo' | 'bar';
例