export type Nullable = T | null // eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-empty-object-type interface DeepReadonlyArray extends ReadonlyArray> {} type DeepReadonlyObject = { readonly [P in keyof T]: DeepReadonly } 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 export type Entries = [keyof T, T[keyof T]][] export type Keys = (keyof T)[]