export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export type LastOfUnion = UnionToIntersection T : never> extends () => infer R ? R : never; export type UnionToTuple> = [Union] extends [never] ? Acc : UnionToTuple, [Last, ...Acc]>;