Convert a TypeScript Union of Types (something | somethingElse) to an Intersection of Types (something & somethingElse).
// See "MergO" from https://github.com/microsoft/TypeScript/issues/26058#issuecomment-553212998
export type UnionToIntersection<U extends object> =
(U extends object ? (k: U) => void : never) extends (k: infer T) => void
? (T extends object ? T : object)
: object