Type Challenges Judge

Union to Tuple

提出詳細

type UnionToIntersection<T> = (T extends T ? (arg: T) => unknown : never) extends ((arg: infer U) => unknown) ? U : never type PopUnion<T> = UnionToIntersection<T extends T ? (a: T) => unknown : never> extends (a: infer U) => unknown ? U : never type UnionToTuple<T> = PopUnion<T> extends infer L ? [L] extends [never] ? [] : [L, ...UnionToTuple<Exclude<T, L>>] : never
提出日時2025-01-24 12:12:25
問題Union to Tuple
ユーザーookkoouu
ステータスAccepted
テストケース
import type { Equal, Expect } from '@type-challenges/utils' type ExtractValuesOfTuple<T extends any[]> = T[keyof T & number] type cases = [ Expect<Equal<UnionToTuple<'a' | 'b'>['length'], 2>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<'a' | 'b'>>, 'a' | 'b'>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<'a'>>, 'a'>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<any>>, any>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<undefined | void | 1>>, void | 1>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<any | 1>>, any | 1>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<any | 1>>, any>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<'d' | 'f' | 1 | never>>, 'f' | 'd' | 1>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<[{ a: 1 }] | 1>>, [{ a: 1 }] | 1>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<never>>, never>>, Expect<Equal<ExtractValuesOfTuple<UnionToTuple<'a' | 'b' | 'c' | 1 | 2 | 'd' | 'e' | 'f' | 'g'>>, 'f' | 'e' | 1 | 2 | 'g' | 'c' | 'd' | 'a' | 'b'>>, ]