1 |
|
2 | export declare type Primitive = string | number | boolean | undefined | null;
|
3 |
|
4 | export declare type Dictionary<T, K extends string | number = string> = {
|
5 | [key in K]: T;
|
6 | };
|
7 | export declare type DictionaryValues<T> = T extends Dictionary<infer U> ? U : never;
|
8 |
|
9 | export declare type DeepPartial<T> = {
|
10 | [P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : DeepPartial<T[P]>;
|
11 | };
|
12 |
|
13 | export declare type DeepRequired<T> = T extends Primitive ? NonNullable<T> : T extends any[] ? DeepRequiredArray<NonNullable<T[number]>> : T extends {} ? {
|
14 | [K in keyof T]-?: DeepRequired<NonNullable<T[K]>>;
|
15 | } : T;
|
16 | interface DeepRequiredArray<T> extends Array<DeepRequired<T>> {
|
17 | }
|
18 |
|
19 | export declare type DeepReadonly<T> = T extends Primitive ? T : T extends (any[] | ReadonlyArray<any>) ? DeepReadonlyArray<T[number]> : T extends Function ? T : T extends {} ? DeepReadonlyObject<T> : unknown;
|
20 | declare type DeepReadonlyObject<T> = {
|
21 | readonly [P in keyof T]: DeepReadonly<T[P]>;
|
22 | };
|
23 | interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {
|
24 | }
|
25 |
|
26 | export declare type Writable<T> = {
|
27 | -readonly [P in keyof T]: T[P];
|
28 | };
|
29 |
|
30 | export declare type DeepWritable<T> = T extends Primitive ? T : T extends (any[] | ReadonlyArray<any>) ? WritableArray<T[number]> : T extends Function ? T : DeepWritableObject<T>;
|
31 | declare type DeepWritableObject<T> = {
|
32 | -readonly [P in keyof T]: DeepWritable<T[P]>;
|
33 | };
|
34 | interface WritableArray<T> extends Array<DeepWritable<T>> {
|
35 | }
|
36 |
|
37 | export declare type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
|
38 |
|
39 | export declare type OmitProperties<T, P> = Pick<T, {
|
40 | [K in keyof T]: T[K] extends P ? never : K;
|
41 | }[keyof T]>;
|
42 |
|
43 | export declare type NonNever<T extends {}> = Pick<T, {
|
44 | [K in keyof T]: T[K] extends never ? never : K;
|
45 | }[keyof T]>;
|
46 |
|
47 | export declare type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
|
48 |
|
49 | export declare type MarkRequired<T, RK extends keyof T> = Exclude<T, RK> & Required<Pick<T, RK>>;
|
50 |
|
51 | export declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
|
52 | /** Easy create opaque types ie. types that are subset of their original types (ex: positive numbers, uppercased string) */
|
53 | export declare type Opaque<K, T> = T & {
|
54 | __TYPE__: K;
|
55 | };
|
56 | /** Easily extract the type of a given object's values */
|
57 | export declare type ValueOf<T> = T[keyof T];
|
58 | /** Type constraint for tuple inference */
|
59 | export declare type Tuple<T = any> = [T] | T[];
|
60 | /** Useful as a return type in interfaces or abstract classes with missing implementation */
|
61 | export declare type AsyncOrSync<T> = PromiseLike<T> | T;
|
62 | export {};
|
63 |
|
\ | No newline at end of file |