export type Override = Omit & R; export type MakeOptional = Override; export type PartialExcept = Partial> & Pick; export type DeepPartial = { [K in keyof T]?: T[K] extends object ? DeepPartial : T[K]; }; export type GeneralObject = Record; export type DeepExtendableObject = T extends (...args: any[]) => any ? T : T extends readonly (infer U)[] ? ReadonlyArray> : T extends GeneralObject ? { [K in keyof T]: DeepExtendableObject; } & GeneralObject : T;