/** * Makes all the properties of an object optional, including nested objects, * and strips all keys that their value is not of the specified allowed value types. */ export type OverridesObject = T extends object ? { [P in keyof T]?: OverridesObject; } : T extends Array ? AllowedValueTypes extends Array ? Array> : never : T extends ReadonlyArray ? AllowedValueTypes extends ReadonlyArray ? ReadonlyArray> : never : AllowedValueTypes extends T ? T : never;