export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export type UnionToOvlds = UnionToIntersection void : never>; export 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;