import type { Cast } from './cast.js'; import type { Extends } from './extends.js'; type IntersectOf = (UNION extends unknown ? (arg: UNION) => void : never) extends (arg: infer INTERSECTION) => void ? INTERSECTION : never; type Last = IntersectOf void : never> extends (arg: infer LAST_ELEMENT) => void ? LAST_ELEMENT : never; type ListOfRec = [], LAST_ELEMENT = Last> = Extends<[UNION], [never]> extends true ? RESULTS : ListOfRec, [LAST_ELEMENT, ...RESULTS]>; /** * Transform a Union into a List * * (⚠️ it might not preserve order) */ export type ListOf = ListOfRec extends infer ELEMENT ? Cast> : never; export {};