export type Nullable = T | null // eslint-disable-next-line no-use-before-define, @typescript-eslint/no-empty-interface interface DeepReadonlyArray extends ReadonlyArray> {} type DeepReadonlyObject = { readonly [P in keyof T]: DeepReadonly // eslint-disable-line no-use-before-define } export type DeepReadonly = T extends (infer R)[] ? DeepReadonlyArray : T extends (...args: any[]) => void ? T : T extends object ? DeepReadonlyObject : T export type DeepPartial = Partial<{ [P in keyof T]: DeepPartial }> export type MergeAndOverride = Own & Omit