type PartialExcept< ParameterType, ParameterField extends keyof ParameterType, > = Pick & Partial>; type Explode = keyof T extends infer K ? K extends unknown ? { [I in keyof T]: I extends K ? T[I] : never } : never : never; type AtMostOne = Explode>; type AtLeastOne }> = Partial & U[keyof U]; type ExactlyOne = AtMostOne & AtLeastOne;