generated at
UnionからUnionへの型レベルmap
U extends Uを使う
これは、Unionから、何か計算を施したUnionへのmapと考えると良いmrsekut
通常の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型に変換する
ts
type ArrayUnion<U> = U extends U ? U[] : never;
使用例
ts
type 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に変換する
ts
type KeyofUnion<T> = T extends T ? keyof T : never;
使用例
ts
type A = { foo: string; }; type B = { bar: number; }; type Keys = KeyofUnion<A | B>; // 'foo' | 'bar';