export type TTupleToIntersect = T extends [infer I] ? I : T extends [infer I, ...infer R] ? I & TTupleToIntersect : never; export type TTupleToUnion = { [K in keyof T]: T[K]; }[number]; export type TUnionToIntersect = (U extends unknown ? (arg: U) => 0 : never) extends (arg: infer I) => 0 ? I : never; export type TUnionLast = TUnionToIntersect 0 : never> extends (x: infer L) => 0 ? L : never; export type TUnionToTuple> = [U] extends [never] ? Result : TUnionToTuple, [Extract, ...Result]>;