export type IsEqual = (() => G extends A ? 1 : 2) extends () => G extends B ? 1 : 2 ? true : false; type Filter = IsEqual extends true ? never : KeyType extends ExcludeType ? never : KeyType; type Except = { [KeyType in keyof ObjectType as Filter]: ObjectType[KeyType]; }; export type RequireAtLeastOne = { [Key in KeysType]-?: Required> & Partial>>; }[KeysType] & Except; export type NeverOrUndefined = { [P in keyof T]?: never; };