type UnionToIntersection = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never; type UnionToOvlds = UnionToIntersection void : never>; type PopUnion = UnionToOvlds extends (a: infer A) => void ? A : never; export type UnionConcat = PopUnion extends infer SELF ? SELF extends string ? Exclude extends never ? SELF : `${UnionConcat, Sep>}${Sep}${SELF}` | UnionConcat, Sep> | SELF : never : never; export type Expand = T extends infer O ? { [K in keyof O]: O[K]; } : never; export type ExpandRecursively = T extends Record ? T extends infer O ? { [K in keyof O]: ExpandRecursively; } : never : T; export {};