type UnionToTuple = UnionToTupleRec; type UnionToTupleRec = [T] extends [never] ? R : UnionToTupleRec>, [LastOfUnion, ...R]>; type LastOfUnion = UnionToIntersection 0 : never> extends (x: infer L) => 0 ? L : never; type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; type Keys> = UnionToTuple; export type { Keys };