type UnionToIntersection = (U extends any ? ((k: U) => void) : never) extends ((k: infer I) => void) ? I : never; type DistributeUnion = { [K in keyof U]: U[K]; }; type OptionalDistributeUnion = { [K in keyof U]?: U[K]; }; export type MergeUnionTypes = DistributeUnion>; export type MergeOptionalUnionTypes = OptionalDistributeUnion>; export {};