/** * Like `Omit` except it reduces empty `{}` for simpler * debugging. */ export type OmitKeys< Source, OmittedKeys extends PropertyKey, > = keyof Source extends OmittedKeys ? object : Omit /** * Like `SetProps` except it reduces empty `{}` for * simpler debugging. */ export type SimpleSetProps< LowObject extends object, HighObject extends object, > = keyof LowObject extends keyof HighObject ? HighObject : keyof LowObject & keyof HighObject extends never ? LowObject & HighObject : SetProps /** * Like `LowObject & HighObject` except that if both keys are defined, * `HighObject` overrides `LowObject` instead of intersecting to it */ export type SetProps< LowObject extends object, HighObject extends object, > = Omit & HighObject