/** Essentials */ export declare type Primitive = string | number | boolean | undefined | null; /** Dictionaries related */ export declare type Dictionary = { [key in K]: T; }; export declare type DictionaryValues = T extends Dictionary ? U : never; /** Like Partial but recursive */ export declare type DeepPartial = { [P in keyof T]?: T[P] extends Array ? Array> : T[P] extends ReadonlyArray ? ReadonlyArray> : DeepPartial; }; /** Like Required but recursive */ export declare type DeepRequired = T extends Primitive ? NonNullable : T extends any[] ? DeepRequiredArray> : T extends {} ? { [K in keyof T]-?: DeepRequired>; } : T; interface DeepRequiredArray extends Array> { } /** Like Readonly but recursive */ export declare type DeepReadonly = T extends Primitive ? T : T extends (any[] | ReadonlyArray) ? DeepReadonlyArray : T extends Function ? T : T extends {} ? DeepReadonlyObject : unknown; declare type DeepReadonlyObject = { readonly [P in keyof T]: DeepReadonly; }; interface DeepReadonlyArray extends ReadonlyArray> { } /** Make readonly object writable */ export declare type Writable = { -readonly [P in keyof T]: T[P]; }; /** Like Writable but recursive */ export declare type DeepWritable = T extends Primitive ? T : T extends (any[] | ReadonlyArray) ? WritableArray : T extends Function ? T : DeepWritableObject; declare type DeepWritableObject = { -readonly [P in keyof T]: DeepWritable; }; interface WritableArray extends Array> { } /** Omit given key in object type */ export declare type Omit = Pick>; /** Omit all properties of given type in object type */ export declare type OmitProperties = Pick; /** Remove keys with `never` value from object type */ export declare type NonNever = Pick; /** Merge 2 types, properties types from the latter override the ones defined on the former type */ export declare type Merge = Omit> & N; /** Mark some properties as required, leaving others unchanged */ export declare type MarkRequired = Exclude & Required>; /** Convert union type to intersection #darkmagic */ export declare type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; /** Easy create opaque types ie. types that are subset of their original types (ex: positive numbers, uppercased string) */ export declare type Opaque = T & { __TYPE__: K; }; /** Easily extract the type of a given object's values */ export declare type ValueOf = T[keyof T]; /** Type constraint for tuple inference */ export declare type Tuple = [T] | T[]; /** Useful as a return type in interfaces or abstract classes with missing implementation */ export declare type AsyncOrSync = PromiseLike | T; export {};