ts-gems 0.0.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common.d.ts +74 -10
- package/lib/deep-modify.d.ts +106 -0
- package/lib/deep-omit.d.ts +88 -0
- package/lib/deep-pick.d.ts +88 -0
- package/lib/index.d.ts +3 -3
- package/lib/keys.ts +66 -25
- package/lib/modify.d.ts +0 -92
- package/lib/type-check.d.ts +112 -60
- package/package.json +7 -7
- package/lib/omit.d.ts +0 -116
- package/lib/pick.d.ts +0 -120
package/lib/common.d.ts
CHANGED
|
@@ -1,19 +1,83 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* BasicPrimitive
|
|
3
|
+
* @desc Type representing [`BasicPrimitive`](https://www.typescriptlang.org/docs/handbook/release-notes/overview.html#smarter-type-alias-preservation) types in TypeScript
|
|
4
|
+
*/
|
|
5
|
+
type BasicPrimitive = number | string | boolean;
|
|
5
6
|
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Primitive
|
|
10
|
+
* @desc Type representing [`Primitive`](https://developer.mozilla.org/en-US/docs/Glossary/Primitive) types
|
|
11
|
+
* in TypeScript: `string | number | bigint | boolean | symbol | null | undefined`
|
|
12
|
+
*/
|
|
13
|
+
export type Primitive = BasicPrimitive | null | bigint | symbol | undefined;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* JsonTypes
|
|
17
|
+
* @desc Type representing JSON types in TypeScript
|
|
18
|
+
*/
|
|
19
|
+
type JsonType = BasicPrimitive | null | object | (BasicPrimitive | object)[]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Builtin
|
|
24
|
+
* @desc Type representing Builtin types in JavaScript
|
|
25
|
+
*/
|
|
26
|
+
export type Builtin = Primitive | Function | String | Number | Date | Error | RegExp | JSON | Math |
|
|
27
|
+
ArrayBuffer | DataView | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array |
|
|
28
|
+
Int32Array | Uint32Array | Float32Array | Float64Array;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Maybe
|
|
32
|
+
* @desc Type representing T | undefined
|
|
33
|
+
*/
|
|
6
34
|
export type Maybe<T> = T | undefined;
|
|
7
|
-
export type Nullable<T> = T | undefined | null;
|
|
8
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Nullish
|
|
38
|
+
* @desc Type representing [nullish values][https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#nullish-coalescing] in TypeScript: `null | undefined`
|
|
39
|
+
*/
|
|
40
|
+
export type Nullish<T = null> = T | undefined | null;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Falsy
|
|
44
|
+
* @desc Type representing falsy values in TypeScript: `false | "" | 0 | null | undefined`
|
|
45
|
+
*/
|
|
46
|
+
export type Falsy = false | '' | 0 | null | undefined;
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
export type Awaited<T> = T extends PromiseLike<infer U> ? U : T;
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
export type Thunk<T, Args extends any[] = any[]> = T | ((...args: Args) => T);
|
|
53
|
+
export type AsyncThunk<T, Args extends any[] = any[]> = Thunk<T> | ((...args: Args) => Promise<T>);
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* PropertyType
|
|
58
|
+
* @desc Returns the type of property at a given key `K`
|
|
59
|
+
*/
|
|
60
|
+
export type PropertyType<T, K extends keyof T> = T[K];
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* $ElementType
|
|
64
|
+
* @desc Returns the type of elements inside of array, tuple or object of type `T`, that matches the given index type `K`
|
|
65
|
+
*/
|
|
66
|
+
export type ElementType<T extends { [P in K & any]: any },
|
|
67
|
+
K extends keyof T | number> = T[K];
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Class
|
|
72
|
+
* @desc Represents constructor of type T
|
|
73
|
+
*/
|
|
9
74
|
export interface Type<T = any> {
|
|
10
75
|
new(...args: any[]): T;
|
|
11
76
|
}
|
|
12
77
|
|
|
13
|
-
|
|
14
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Class
|
|
80
|
+
* @desc Represents Class constructor of type T
|
|
81
|
+
*/
|
|
15
82
|
export type Class<Args extends any[] = any[], Instance = {}, Static = {}> =
|
|
16
83
|
(new(...args: Args) => Instance) & Static;
|
|
17
|
-
|
|
18
|
-
export type Thunk<T, Args extends any[] = any[]> = T | ((...args: Args) => T);
|
|
19
|
-
export type AsyncThunk<T, Args extends any[] = any[]> = T | ((...args: Args) => T) | ((...args: Args) => Promise<T>);
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import {Builtin} from './common';
|
|
2
|
+
import {IfTuple} from './type-check';
|
|
3
|
+
import {OptionalKeys} from './keys';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Partial but deeply
|
|
7
|
+
*/
|
|
8
|
+
export type DeepPartial<T> = _DeepPartial<T>;
|
|
9
|
+
type _DeepPartial<T> =
|
|
10
|
+
T extends Builtin ? T
|
|
11
|
+
: T extends Promise<infer U> ? Promise<DeepPartial<U>>
|
|
12
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepPartial<V>>
|
|
13
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPartial<V>>
|
|
14
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPartial<V>>
|
|
15
|
+
: T extends Set<infer U> ? Set<DeepPartial<U>>
|
|
16
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPartial<U>>
|
|
17
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepPartial<U>>
|
|
18
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPartial<T[K]> }
|
|
19
|
+
: T extends (infer U)[] ? DeepPartial<U>[]
|
|
20
|
+
: { [P in keyof T]?: DeepPartial<T[P]> };
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Combination of Partial and Writable but deeply
|
|
24
|
+
*/
|
|
25
|
+
export type DeepBuildable<T> = _DeepBuildable<T>;
|
|
26
|
+
type _DeepBuildable<T> =
|
|
27
|
+
T extends Builtin ? T
|
|
28
|
+
: T extends Promise<infer U> ? Promise<DeepBuildable<U>>
|
|
29
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepBuildable<V>>
|
|
30
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepBuildable<V>>
|
|
31
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepBuildable<V>>
|
|
32
|
+
: T extends Set<infer U> ? Set<DeepBuildable<U>>
|
|
33
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepBuildable<U>>
|
|
34
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepBuildable<U>>
|
|
35
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepBuildable<T[K]> }
|
|
36
|
+
: T extends (infer U)[] ? DeepBuildable<U>[]
|
|
37
|
+
: { -readonly [P in keyof T]?: DeepBuildable<T[P]> };
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Make all properties in T required deeply
|
|
41
|
+
*/
|
|
42
|
+
export type DeepRequired<T> = _DeepRequired<T>;
|
|
43
|
+
type _DeepRequired<T> =
|
|
44
|
+
T extends Builtin ? T
|
|
45
|
+
: T extends Promise<infer U> ? Promise<DeepRequired<U>>
|
|
46
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepRequired<V>>
|
|
47
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepRequired<V>>
|
|
48
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepRequired<V>>
|
|
49
|
+
: T extends Set<infer U> ? Set<DeepRequired<U>>
|
|
50
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepRequired<U>>
|
|
51
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepRequired<U>>
|
|
52
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepRequired<T[K]> }
|
|
53
|
+
: T extends (infer U)[] ? DeepRequired<U>[]
|
|
54
|
+
: { [P in keyof T]-?: DeepRequired<T[P]> };
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Make all properties in T readonly deeply
|
|
59
|
+
*/
|
|
60
|
+
export type DeepReadonly<T> = _DeepReadonly<T>;
|
|
61
|
+
type _DeepReadonly<T> =
|
|
62
|
+
T extends Builtin ? T
|
|
63
|
+
: T extends Promise<infer U> ? Promise<DeepReadonly<U>>
|
|
64
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepReadonly<V>>
|
|
65
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepReadonly<V>>
|
|
66
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepReadonly<V>>
|
|
67
|
+
: T extends Set<infer U> ? Set<DeepReadonly<U>>
|
|
68
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepReadonly<U>>
|
|
69
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepReadonly<U>>
|
|
70
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepReadonly<T[K]> }
|
|
71
|
+
: T extends (infer U)[] ? DeepReadonly<U>[]
|
|
72
|
+
: { readonly [P in keyof T]: DeepReadonly<T[P]> };
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Make all properties in T writable deeply
|
|
76
|
+
*/
|
|
77
|
+
export type DeepWritable<T> = _DeepWritable<T>;
|
|
78
|
+
type _DeepWritable<T> =
|
|
79
|
+
T extends Builtin ? T
|
|
80
|
+
: T extends Promise<infer U> ? Promise<DeepWritable<U>>
|
|
81
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepWritable<V>>
|
|
82
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepWritable<V>>
|
|
83
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepWritable<V>>
|
|
84
|
+
: T extends Set<infer U> ? Set<DeepWritable<U>>
|
|
85
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepWritable<U>>
|
|
86
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepWritable<U>>
|
|
87
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepWritable<T[K]> }
|
|
88
|
+
: T extends (infer U)[] ? DeepWritable<U>[]
|
|
89
|
+
: { -readonly [P in keyof T]: DeepWritable<T[P]> };
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Make all properties in T nullable deeply
|
|
93
|
+
*/
|
|
94
|
+
export type DeepNullish<T> = _DeepNullish<T>;
|
|
95
|
+
type _DeepNullish<T> =
|
|
96
|
+
T extends Builtin ? T | null | undefined
|
|
97
|
+
: T extends Promise<infer U> ? Promise<DeepNullish<U>>
|
|
98
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepNullish<V>>
|
|
99
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepNullish<V>>
|
|
100
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepNullish<V>>
|
|
101
|
+
: T extends Set<infer U> ? Set<DeepNullish<U>>
|
|
102
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepNullish<U>>
|
|
103
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepNullish<U>>
|
|
104
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepNullish<T[K]> }
|
|
105
|
+
: T extends (infer U)[] ? DeepNullish<U>[]
|
|
106
|
+
: { [P in keyof T]-?: DeepNullish<T[P]> };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import {Builtin} from './common';
|
|
2
|
+
import {IfTuple} from './type-check';
|
|
3
|
+
import {JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys} from './keys';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Omit all optional properties in T deeply
|
|
7
|
+
*/
|
|
8
|
+
export type DeepOmitOptional<T> = _DeepOmitOptional<T>;
|
|
9
|
+
type _DeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
|
|
10
|
+
T extends Builtin ? T
|
|
11
|
+
: T extends Promise<infer U> ? Promise<DeepOmitOptional<U>>
|
|
12
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepOmitOptional<V>>
|
|
13
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitOptional<V>>
|
|
14
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitOptional<V>>
|
|
15
|
+
: T extends Set<infer U> ? Set<DeepOmitOptional<U>>
|
|
16
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitOptional<U>>
|
|
17
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepOmitOptional<U>>
|
|
18
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitOptional<T[K]> }
|
|
19
|
+
: T extends (infer U)[] ? DeepOmitOptional<U>[]
|
|
20
|
+
: { [P in K]: DeepOmitOptional<T[P]> };
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Omit all required properties in T deeply
|
|
24
|
+
*/
|
|
25
|
+
export type DeepOmitRequired<T> = _DeepOmitRequired<T>;
|
|
26
|
+
type _DeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
|
|
27
|
+
T extends Builtin ? T
|
|
28
|
+
: T extends Promise<infer U> ? Promise<DeepOmitRequired<U>>
|
|
29
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepOmitRequired<V>>
|
|
30
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitRequired<V>>
|
|
31
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitRequired<V>>
|
|
32
|
+
: T extends Set<infer U> ? Set<DeepOmitRequired<U>>
|
|
33
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitRequired<U>>
|
|
34
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepOmitRequired<U>>
|
|
35
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitRequired<T[K]> }
|
|
36
|
+
: T extends (infer U)[] ? DeepOmitRequired<U>[]
|
|
37
|
+
: { [P in J]: DeepOmitRequired<T[P]> };
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Omit all readonly properties in T deeply
|
|
41
|
+
*/
|
|
42
|
+
export type DeepOmitReadonly<T> = _DeepOmitReadonly<T>;
|
|
43
|
+
type _DeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
|
|
44
|
+
T extends Builtin ? T
|
|
45
|
+
: T extends Promise<infer U> ? Promise<DeepOmitReadonly<U>>
|
|
46
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepOmitReadonly<V>>
|
|
47
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitReadonly<V>>
|
|
48
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitReadonly<V>>
|
|
49
|
+
: T extends Set<infer U> ? Set<DeepOmitReadonly<U>>
|
|
50
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitReadonly<U>>
|
|
51
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepOmitReadonly<U>>
|
|
52
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitReadonly<T[K]> }
|
|
53
|
+
: T extends (infer U)[] ? DeepOmitReadonly<U>[]
|
|
54
|
+
: { [P in J]: DeepOmitReadonly<T[P]> };
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Omit all writable properties in T deeply
|
|
58
|
+
*/
|
|
59
|
+
export type DeepOmitWritable<T> = _DeepOmitWritable<T>
|
|
60
|
+
type _DeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
|
|
61
|
+
T extends Builtin ? T
|
|
62
|
+
: T extends Promise<infer U> ? Promise<DeepOmitWritable<U>>
|
|
63
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepOmitWritable<V>>
|
|
64
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitWritable<V>>
|
|
65
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitWritable<V>>
|
|
66
|
+
: T extends Set<infer U> ? Set<DeepOmitWritable<U>>
|
|
67
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitWritable<U>>
|
|
68
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepOmitWritable<U>>
|
|
69
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitWritable<T[K]> }
|
|
70
|
+
: T extends (infer U)[] ? DeepOmitWritable<U>[]
|
|
71
|
+
: { [P in K]: DeepOmitWritable<T[P]> }
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Omit all JSON properties in T deeply
|
|
75
|
+
*/
|
|
76
|
+
export type DeepOmitJson<T> = _DeepOmitJson<T>
|
|
77
|
+
type _DeepOmitJson<T, K extends keyof T = Exclude<keyof T, JsonKeys<T>>> =
|
|
78
|
+
T extends Builtin ? T
|
|
79
|
+
: T extends Promise<infer U> ? Promise<DeepOmitJson<U>>
|
|
80
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepOmitJson<V>>
|
|
81
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitJson<V>>
|
|
82
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitJson<V>>
|
|
83
|
+
: T extends Set<infer U> ? Set<DeepOmitJson<U>>
|
|
84
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitJson<U>>
|
|
85
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepOmitJson<U>>
|
|
86
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitJson<T[K]> }
|
|
87
|
+
: T extends (infer U)[] ? DeepOmitJson<U>[]
|
|
88
|
+
: { [P in K]: DeepOmitJson<T[P]> };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import {Builtin} from './common';
|
|
2
|
+
import {IfTuple} from './type-check';
|
|
3
|
+
import {JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys} from './keys';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Pick all optional properties in T deeply
|
|
7
|
+
*/
|
|
8
|
+
export type DeepPickOptional<T> = _DeepPickOptional<T>;
|
|
9
|
+
type _DeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
10
|
+
T extends Builtin ? T
|
|
11
|
+
: T extends Promise<infer U> ? Promise<DeepPickOptional<U>>
|
|
12
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepPickOptional<V>>
|
|
13
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickOptional<V>>
|
|
14
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickOptional<V>>
|
|
15
|
+
: T extends Set<infer U> ? Set<DeepPickOptional<U>>
|
|
16
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickOptional<U>>
|
|
17
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepPickOptional<U>>
|
|
18
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickOptional<T[K]> }
|
|
19
|
+
: T extends (infer U)[] ? DeepPickOptional<U>[]
|
|
20
|
+
: { [P in K]: DeepPickOptional<T[P]> };
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Pick all required properties in T deeply
|
|
24
|
+
*/
|
|
25
|
+
export type DeepPickRequired<T> = _DeepPickRequired<T>;
|
|
26
|
+
type _DeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
27
|
+
T extends Builtin ? T
|
|
28
|
+
: T extends Promise<infer U> ? Promise<DeepPickRequired<U>>
|
|
29
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepPickRequired<V>>
|
|
30
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickRequired<V>>
|
|
31
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickRequired<V>>
|
|
32
|
+
: T extends Set<infer U> ? Set<DeepPickRequired<U>>
|
|
33
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickRequired<U>>
|
|
34
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepPickRequired<U>>
|
|
35
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickRequired<T[K]> }
|
|
36
|
+
: T extends (infer U)[] ? DeepPickRequired<U>[]
|
|
37
|
+
: { [P in J]: DeepPickRequired<T[P]> };
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Pick all readonly properties in T deeply
|
|
41
|
+
*/
|
|
42
|
+
export type DeepPickReadonly<T> = _DeepPickReadonly<T>;
|
|
43
|
+
type _DeepPickReadonly<T, J extends keyof T = ReadonlyKeys<T>> =
|
|
44
|
+
T extends Builtin ? T
|
|
45
|
+
: T extends Promise<infer U> ? Promise<DeepPickReadonly<U>>
|
|
46
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepPickReadonly<V>>
|
|
47
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickReadonly<V>>
|
|
48
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickReadonly<V>>
|
|
49
|
+
: T extends Set<infer U> ? Set<DeepPickReadonly<U>>
|
|
50
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickReadonly<U>>
|
|
51
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepPickReadonly<U>>
|
|
52
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickReadonly<T[K]> }
|
|
53
|
+
: T extends (infer U)[] ? DeepPickReadonly<U>[]
|
|
54
|
+
: { [P in J]: DeepPickReadonly<T[P]> };
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Pick all writable properties in T deeply
|
|
58
|
+
*/
|
|
59
|
+
export type DeepPickWritable<T> = _DeepPickWritable<T>
|
|
60
|
+
type _DeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
61
|
+
T extends Builtin ? T
|
|
62
|
+
: T extends Promise<infer U> ? Promise<DeepPickWritable<U>>
|
|
63
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepPickWritable<V>>
|
|
64
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickWritable<V>>
|
|
65
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickWritable<V>>
|
|
66
|
+
: T extends Set<infer U> ? Set<DeepPickWritable<U>>
|
|
67
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickWritable<U>>
|
|
68
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepPickWritable<U>>
|
|
69
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickWritable<T[K]> }
|
|
70
|
+
: T extends (infer U)[] ? DeepPickWritable<U>[]
|
|
71
|
+
: { [P in K]: DeepPickWritable<T[P]> }
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Pick all JSON properties in T deeply
|
|
75
|
+
*/
|
|
76
|
+
export type DeepPickJson<T> = _DeepPickJson<T>
|
|
77
|
+
type _DeepPickJson<T, K extends keyof T = JsonKeys<T>> =
|
|
78
|
+
T extends Builtin ? T
|
|
79
|
+
: T extends Promise<infer U> ? Promise<DeepPickJson<U>>
|
|
80
|
+
: T extends Map<infer K, infer V> ? Map<K, DeepPickJson<V>>
|
|
81
|
+
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickJson<V>>
|
|
82
|
+
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickJson<V>>
|
|
83
|
+
: T extends Set<infer U> ? Set<DeepPickJson<U>>
|
|
84
|
+
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickJson<U>>
|
|
85
|
+
: T extends WeakSet<infer U> ? WeakSet<DeepPickJson<U>>
|
|
86
|
+
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickJson<T[K]> }
|
|
87
|
+
: T extends (infer U)[] ? DeepPickJson<U>[]
|
|
88
|
+
: { [P in K]: DeepPickJson<T[P]> };
|
package/lib/index.d.ts
CHANGED
package/lib/keys.ts
CHANGED
|
@@ -1,48 +1,89 @@
|
|
|
1
|
-
import {IfEquals,
|
|
1
|
+
import {IfEquals, IfCompatible, IfUndefined, IfAny, IfJson} from './type-check';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* KeyOf
|
|
5
|
+
* @desc Returns the union type of all the keys in a type
|
|
5
6
|
*/
|
|
6
|
-
export type
|
|
7
|
+
export type KeysOf<T> = keyof T;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* ValuesOf
|
|
11
|
+
* @desc Returns the union type of all the values in a type
|
|
12
|
+
*/
|
|
13
|
+
export type ValuesOf<T> = T[keyof T];
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* OptionalKeys
|
|
18
|
+
* @desc Returns optional keys of an object
|
|
19
|
+
*/
|
|
20
|
+
export type OptionalKeys<T> = ValuesOf<{
|
|
7
21
|
[K in keyof T]-?: {} extends Pick<T, K> ? K : never;
|
|
8
|
-
}
|
|
22
|
+
}>;
|
|
9
23
|
|
|
10
24
|
/**
|
|
11
|
-
*
|
|
25
|
+
* RequiredKeys
|
|
26
|
+
* @desc Returns required keys of an object
|
|
12
27
|
*/
|
|
13
28
|
export type RequiredKeys<T> = Exclude<keyof T, OptionalKeys<T>>;
|
|
14
29
|
|
|
15
30
|
/**
|
|
16
|
-
*
|
|
31
|
+
* @desc Returns readonly keys of an object
|
|
17
32
|
*/
|
|
18
|
-
export type
|
|
19
|
-
[K in keyof T]-?:
|
|
20
|
-
|
|
21
|
-
}[keyof T];
|
|
33
|
+
export type ReadonlyKeys<T> = ValuesOf<{
|
|
34
|
+
[K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { -readonly [Q in K]: T[K] }, never, K>
|
|
35
|
+
}>;
|
|
22
36
|
|
|
23
37
|
/**
|
|
24
|
-
*
|
|
38
|
+
* @desc Returns non function keys of an object
|
|
25
39
|
*/
|
|
26
|
-
export type
|
|
27
|
-
|
|
28
|
-
}[keyof T];
|
|
40
|
+
export type NonFunctionKeys<T> = Exclude<keyof T, FunctionKeys<T>>;
|
|
41
|
+
|
|
29
42
|
|
|
30
43
|
/**
|
|
31
|
-
*
|
|
44
|
+
* @desc Returns non function keys of an object
|
|
32
45
|
*/
|
|
33
|
-
export type
|
|
46
|
+
export type JsonKeys<T> = ValuesOf<{
|
|
47
|
+
[K in keyof T]-?: IfUndefined<T[K]> extends false ?
|
|
48
|
+
K extends symbol ? never :
|
|
49
|
+
IfJson<T[K]> extends true ?
|
|
50
|
+
K : never : never;
|
|
51
|
+
}>;
|
|
34
52
|
|
|
35
53
|
/**
|
|
36
|
-
*
|
|
54
|
+
* @desc Returns writable keys of an object
|
|
37
55
|
*/
|
|
38
|
-
export type WritableKeys<T> = Exclude<
|
|
39
|
-
|
|
40
|
-
}[keyof T], FunctionKeys<T>>;
|
|
56
|
+
export type WritableKeys<T> = Exclude<keyof T, ReadonlyKeys<T>>;
|
|
57
|
+
|
|
41
58
|
|
|
42
59
|
/**
|
|
43
|
-
*
|
|
60
|
+
* @desc Returns writable json keys of an object
|
|
44
61
|
*/
|
|
45
|
-
type
|
|
46
|
-
[K in keyof T]
|
|
47
|
-
}[keyof T]
|
|
48
|
-
|
|
62
|
+
export type WritableJsonKeys<T> = Extract<{
|
|
63
|
+
[K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { -readonly [Q in K]: T[K] }, K, never>
|
|
64
|
+
}[keyof T], JsonKeys<T>>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @desc Returns Function keys of an object
|
|
68
|
+
*/
|
|
69
|
+
export type FunctionKeys<T> = ValuesOf<{
|
|
70
|
+
[K in keyof T]-?: IfUndefined<T[K]> extends false ?
|
|
71
|
+
IfAny<T[K]> extends false ?
|
|
72
|
+
T[K] extends Function ? K
|
|
73
|
+
: never : never : never;
|
|
74
|
+
}>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @desc Returns keys that match given type
|
|
78
|
+
*/
|
|
79
|
+
export type KeysCompatible<T, U> = ValuesOf<{
|
|
80
|
+
[K in keyof T]-?: IfCompatible<T[K], U, K, never>;
|
|
81
|
+
}>;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @desc Returns keys that equals given type
|
|
85
|
+
*/
|
|
86
|
+
export type KeysEquals<T, U> = ValuesOf<{
|
|
87
|
+
[K in keyof T]-?: IfEquals<T[K], U, K, never>;
|
|
88
|
+
}>;
|
|
89
|
+
|
package/lib/modify.d.ts
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/** Like Partial but recursive */
|
|
2
|
-
import {Builtin} from './common';
|
|
3
|
-
import {IsTuple} from './type-check';
|
|
4
|
-
|
|
5
1
|
/**
|
|
6
2
|
* Make all properties in T writable
|
|
7
3
|
*/
|
|
@@ -13,91 +9,3 @@ export type Writable<T> = {
|
|
|
13
9
|
* Combination of Partial and Writable
|
|
14
10
|
*/
|
|
15
11
|
export type Buildable<T> = Partial<Writable<T>>;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Combination of DeepPartial and DeepWritable
|
|
19
|
-
*/
|
|
20
|
-
export type DeepBuildable<T> = DeepPartial<DeepWritable<T>>;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Make all properties in T optional deeply
|
|
24
|
-
*/
|
|
25
|
-
export type DeepPartial<T> =
|
|
26
|
-
T extends Builtin ? T
|
|
27
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepPartial<V>>
|
|
28
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPartial<V>>
|
|
29
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPartial<V>>
|
|
30
|
-
: T extends Set<infer U> ? Set<DeepPartial<U>>
|
|
31
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPartial<U>>
|
|
32
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepPartial<U>>
|
|
33
|
-
: T extends (infer U)[] ? true extends IsTuple<T>
|
|
34
|
-
? { [K in keyof T]?: DeepPartial<T[K]> } : (DeepPartial<U>)[]
|
|
35
|
-
: T extends Promise<infer U> ? Promise<DeepPartial<U>>
|
|
36
|
-
: Partial<T>;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Make all properties in T required deeply
|
|
40
|
-
*/
|
|
41
|
-
export type DeepRequired<T> =
|
|
42
|
-
T extends Builtin ? T
|
|
43
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepRequired<V>>
|
|
44
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepRequired<V>>
|
|
45
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepRequired<V>>
|
|
46
|
-
: T extends Set<infer U> ? Set<DeepRequired<U>>
|
|
47
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepRequired<U>>
|
|
48
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepRequired<U>>
|
|
49
|
-
: T extends (infer U)[] ? true extends IsTuple<T>
|
|
50
|
-
? { [K in keyof T]?: DeepRequired<T[K]> } : (DeepRequired<U>)[]
|
|
51
|
-
: T extends Promise<infer U> ? Promise<DeepRequired<U>>
|
|
52
|
-
: Required<T>;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Make all properties in T readonly deeply
|
|
56
|
-
*/
|
|
57
|
-
export type DeepReadonly<T> =
|
|
58
|
-
T extends Builtin ? T
|
|
59
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepReadonly<V>>
|
|
60
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepReadonly<V>>
|
|
61
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepReadonly<V>>
|
|
62
|
-
: T extends Set<infer U> ? Set<DeepReadonly<U>>
|
|
63
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepReadonly<U>>
|
|
64
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepReadonly<U>>
|
|
65
|
-
: T extends (infer U)[] ? true extends IsTuple<T>
|
|
66
|
-
? { [K in keyof T]?: DeepReadonly<T[K]> } : (DeepReadonly<U>)[]
|
|
67
|
-
: T extends Promise<infer U> ? Promise<DeepReadonly<U>>
|
|
68
|
-
: Readonly<T>;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Make all properties in T writable deeply
|
|
72
|
-
*/
|
|
73
|
-
export type DeepWritable<T> =
|
|
74
|
-
T extends Builtin ? T
|
|
75
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepWritable<V>>
|
|
76
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepWritable<V>>
|
|
77
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepWritable<V>>
|
|
78
|
-
: T extends Set<infer U> ? Set<DeepWritable<U>>
|
|
79
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepWritable<U>>
|
|
80
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepWritable<U>>
|
|
81
|
-
: T extends (infer U)[] ? true extends IsTuple<T>
|
|
82
|
-
? { [K in keyof T]?: DeepWritable<T[K]> } : (DeepWritable<U>)[]
|
|
83
|
-
: T extends Promise<infer U> ? Promise<DeepWritable<U>>
|
|
84
|
-
: Writable<T>;
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Make all properties in T nullable deeply
|
|
88
|
-
*/
|
|
89
|
-
export type DeepNullable<T> =
|
|
90
|
-
T extends Builtin ? T
|
|
91
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepNullable<V>>
|
|
92
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepNullable<V>>
|
|
93
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepNullable<V>>
|
|
94
|
-
: T extends Set<infer U> ? Set<DeepNullable<U>>
|
|
95
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepNullable<U>>
|
|
96
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepNullable<U>>
|
|
97
|
-
: T extends (infer U)[] ? true extends IsTuple<T>
|
|
98
|
-
? { [K in keyof T]?: DeepNullable<T[K]> } : (DeepNullable<U>)[]
|
|
99
|
-
: T extends Promise<infer U> ? Promise<DeepNullable<U>>
|
|
100
|
-
: T extends {}
|
|
101
|
-
? { [K in keyof T]: DeepNullable<T[K]> }
|
|
102
|
-
: T | null | undefined;
|
|
103
|
-
|
package/lib/type-check.d.ts
CHANGED
|
@@ -1,110 +1,162 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {Primitive, Type} from './common';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
* Returns Y if typeof T is "never", N otherwise
|
|
5
|
-
*/
|
|
6
|
-
export type IsExtends<T, U> = [T] extends [U] ? true : false;
|
|
3
|
+
type NonObj = Primitive | Function;
|
|
7
4
|
|
|
8
5
|
/**
|
|
9
|
-
* Returns Y if typeof T is "
|
|
6
|
+
* Returns Y if typeof T is "any", N otherwise
|
|
10
7
|
*/
|
|
11
|
-
export type
|
|
8
|
+
export type IfAny<T, Y = true, N = false> =
|
|
9
|
+
0 extends 1 & T ? Y : N;
|
|
12
10
|
|
|
13
11
|
/**
|
|
14
|
-
* Returns
|
|
12
|
+
* Returns "Y" if "T" is "never", "N" otherwise
|
|
15
13
|
*/
|
|
16
|
-
export type
|
|
14
|
+
export type IfNever<T, Y = true, N = false> =
|
|
15
|
+
[T] extends [never] ? Y : N;
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
|
-
* Returns Y if
|
|
18
|
+
* Returns Y if T is undefined, N otherwise
|
|
20
19
|
*/
|
|
21
|
-
export type
|
|
20
|
+
export type IfUndefined<T, Y = true, N = false> =
|
|
21
|
+
IfEquals<T, undefined, Y, N>;
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* Returns
|
|
24
|
+
* Returns Y if typeof T is "unknown", N otherwise
|
|
25
25
|
*/
|
|
26
|
-
export type
|
|
26
|
+
export type IfUnknown<T, Y = true, N = false> =
|
|
27
|
+
IfEquals<T, unknown, Y, N>;
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
|
-
* Returns Y if typeof T is
|
|
30
|
+
* Returns Y if typeof T is null, N otherwise
|
|
30
31
|
*/
|
|
31
|
-
export type
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
? IfEmptyObject<T, N, Y>
|
|
35
|
-
: N
|
|
36
|
-
: N;
|
|
32
|
+
export type IfNull<T, Y = true, N = false> =
|
|
33
|
+
IfEquals<T, null, Y, N>;
|
|
34
|
+
|
|
37
35
|
/**
|
|
38
|
-
* Returns
|
|
36
|
+
* Returns Y if typeof T is null, N otherwise
|
|
39
37
|
*/
|
|
40
|
-
export type
|
|
38
|
+
export type IfNullish<T, Y = true, N = false> =
|
|
39
|
+
IfNever<T> extends true ? N
|
|
40
|
+
: T extends null ? Y
|
|
41
|
+
: T extends undefined ? Y : N;
|
|
42
|
+
|
|
41
43
|
|
|
42
44
|
/**
|
|
43
45
|
* Returns Y if typeof T is a tuple, N otherwise
|
|
44
46
|
*/
|
|
45
|
-
export type IfTuple<T, Y =
|
|
46
|
-
|
|
47
|
-
?
|
|
48
|
-
: T extends any[]
|
|
47
|
+
export type IfTuple<T, Y = true, N = false> =
|
|
48
|
+
IfEquals<T, [any]> extends true
|
|
49
|
+
? T extends [any]
|
|
49
50
|
? number extends T['length'] ? N : Y
|
|
50
|
-
: N;
|
|
51
|
+
: N : N;
|
|
52
|
+
export type IfTupleOrAny<T, Y = true, N = false> =
|
|
53
|
+
IfAny<T> extends true ? Y : IfTuple<T, Y, N>;
|
|
51
54
|
|
|
52
55
|
/**
|
|
53
|
-
* Returns
|
|
56
|
+
* Returns Y if typeof T is "Primitive", N otherwise
|
|
54
57
|
*/
|
|
55
|
-
export type
|
|
58
|
+
export type IfPrimitive<T, Y = true, N = false> =
|
|
59
|
+
IfNever<T> extends true ? N :
|
|
60
|
+
IfClass<T> extends true ? N :
|
|
61
|
+
IfFunction<T> extends true ? N :
|
|
62
|
+
T extends Primitive ? Y :
|
|
63
|
+
N;
|
|
56
64
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
*/
|
|
60
|
-
export type IfObject<T, Y = T, N = never> =
|
|
61
|
-
IfNever<T, N,
|
|
62
|
-
T extends object
|
|
63
|
-
? T extends NonObj | any[]
|
|
64
|
-
? N
|
|
65
|
-
: Y
|
|
66
|
-
: N>;
|
|
65
|
+
export type IfPrimitiveOrAny<T, Y = true, N = false> =
|
|
66
|
+
IfAny<T> extends true ? Y : IfPrimitive<T, Y, N>;
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
|
-
* Returns
|
|
69
|
+
* Returns Y if typeof T is JSON like, N otherwise
|
|
70
70
|
*/
|
|
71
|
-
export type
|
|
71
|
+
export type IfJson<T, Y = true, N = false> =
|
|
72
|
+
IfNever<T> extends true ? N :
|
|
73
|
+
IfClass<T> extends true ? N :
|
|
74
|
+
IfFunction<T> extends true ? N :
|
|
75
|
+
IfUndefined<T> extends true ? N :
|
|
76
|
+
IfEquals<T, number> extends true ? Y :
|
|
77
|
+
IfEquals<T, string> extends true ? Y :
|
|
78
|
+
IfEquals<T, boolean> extends true ? Y :
|
|
79
|
+
IfEquals<T, null> extends true ? Y :
|
|
80
|
+
IfObject<T, Y> extends true ? Y :
|
|
81
|
+
T extends (infer U)[] ? IfJson<U> extends true ? Y : N
|
|
82
|
+
: N;
|
|
83
|
+
|
|
84
|
+
export type IfJsonOrAny<T, Y = true, N = false> =
|
|
85
|
+
IfAny<T> extends true ? Y : IfJson<T, Y, N>;
|
|
72
86
|
|
|
73
87
|
/**
|
|
74
88
|
* Returns Y if typeof T is an empty object, N otherwise
|
|
75
89
|
*/
|
|
76
|
-
export type IfEmptyObject<T
|
|
77
|
-
|
|
78
|
-
? N
|
|
79
|
-
: T extends object
|
|
80
|
-
? keyof T extends never ? Y : N
|
|
81
|
-
: N
|
|
90
|
+
export type IfEmptyObject<T, Y = true, N = false> =
|
|
91
|
+
IfEquals<T, {}, Y, N>;
|
|
82
92
|
|
|
83
93
|
/**
|
|
84
|
-
* Returns
|
|
94
|
+
* Returns Y if typeof T is an object, N otherwise
|
|
85
95
|
*/
|
|
86
|
-
export type
|
|
96
|
+
export type IfObject<T, Y = true, N = false> =
|
|
97
|
+
IfNever<T> extends true ? N
|
|
98
|
+
: T extends object
|
|
99
|
+
? T extends NonObj | any[]
|
|
100
|
+
? N
|
|
101
|
+
: Y
|
|
102
|
+
: N;
|
|
87
103
|
|
|
104
|
+
export type IfObjectOrAny<T, Y = true, N = false> =
|
|
105
|
+
IfAny<T> extends true ? Y : IfObject<T, Y, N>;
|
|
88
106
|
|
|
89
107
|
/**
|
|
90
|
-
* Returns Y if
|
|
108
|
+
* Returns Y if typeof T is an empty object, N otherwise
|
|
91
109
|
*/
|
|
92
|
-
type
|
|
93
|
-
|
|
110
|
+
export type IfFunction<T, Y = true, N = false> =
|
|
111
|
+
IfNever<T> extends true ? N
|
|
112
|
+
: IfUndefined<T> extends true ? N
|
|
113
|
+
: IfNull<T> extends true ? N
|
|
114
|
+
: T extends Function ? Y
|
|
115
|
+
: N;
|
|
116
|
+
|
|
117
|
+
export type IfFunctionOrAny<T, Y = true, N = false> =
|
|
118
|
+
IfAny<T> extends true ? Y : IfFunction<T, Y, N>;
|
|
94
119
|
|
|
95
120
|
/**
|
|
96
|
-
* Returns
|
|
121
|
+
* Returns Y if typeof T is an empty object, N otherwise
|
|
97
122
|
*/
|
|
98
|
-
export type
|
|
123
|
+
export type IfClass<T, Y = true, N = false> =
|
|
124
|
+
IfNever<T> extends true ? N
|
|
125
|
+
: IfUndefined<T> extends true ? N
|
|
126
|
+
: IfNull<T> extends true ? N
|
|
127
|
+
: T extends Type ? Y
|
|
128
|
+
: N;
|
|
129
|
+
|
|
130
|
+
export type IfClassOrAny<T, Y = true, N = false> =
|
|
131
|
+
IfAny<T> extends true ? Y : IfClass<T, Y, N>;
|
|
99
132
|
|
|
100
133
|
|
|
101
134
|
/**
|
|
102
|
-
* Returns Y if T1 is exactly same with T2, N otherwise
|
|
135
|
+
* Returns "Y" if "T1" is exactly same with "T2", "N" otherwise
|
|
103
136
|
*/
|
|
104
|
-
|
|
105
|
-
|
|
137
|
+
type IfEquals<T1, T2, Y = true, N = false> =
|
|
138
|
+
(<G>() => G extends T1 ? 1 : 2) extends (<G>() => G extends T2 ? 1 : 2) ? Y : N;
|
|
106
139
|
|
|
107
140
|
/**
|
|
108
|
-
* Returns
|
|
109
|
-
*/
|
|
110
|
-
export type
|
|
141
|
+
* Returns "Y" if type "T" matches "U", "N" otherwise
|
|
142
|
+
*/
|
|
143
|
+
export type IfCompatible<T1, T2, Y = true, N = false> =
|
|
144
|
+
IfUndefined<T1> extends true ? IfEquals<T1, T2, Y, N> : IfUndefined<T2> extends true ? N
|
|
145
|
+
: IfNever<T1> extends true ? IfEquals<T1, T2, Y, N> : IfNever<T2> extends true ? N
|
|
146
|
+
: IfNull<T1> extends true ? IfEquals<T1, T2, Y, N> : IfNull<T2> extends true ? N
|
|
147
|
+
: IfUnknown<T1> extends true ? Y : IfUnknown<T2> extends true ? Y
|
|
148
|
+
: IfAny<T1> extends true ? Y : IfAny<T2> extends true ? Y
|
|
149
|
+
: IfEmptyObject<T1> extends true ? IfObject<T2, Y, N>
|
|
150
|
+
: IfEmptyObject<T2> extends true ? IfObject<T1, Y, N>
|
|
151
|
+
: IfFunction<T1> extends true ? IfCompatibleFunction<T1, T2, Y, N>
|
|
152
|
+
: IfObject<T1> extends true ? [T1] extends [T2] ? Y : N
|
|
153
|
+
: [T1] extends [T2] ? Y
|
|
154
|
+
: IfPrimitive<T2> extends true ? [T2] extends [T1] ? Y
|
|
155
|
+
: N : N;
|
|
156
|
+
|
|
157
|
+
type IfCompatibleFunction<T1, T2, Y = true, N = false> =
|
|
158
|
+
IfFunction<T1> extends false ? N
|
|
159
|
+
: IfFunction<T2> extends false ? N
|
|
160
|
+
: T1 extends T2
|
|
161
|
+
? Y
|
|
162
|
+
: N;
|
package/package.json
CHANGED
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"lodash",
|
|
13
13
|
"underscore"
|
|
14
14
|
],
|
|
15
|
-
"version": "0.0
|
|
15
|
+
"version": "1.0.0",
|
|
16
16
|
"types": "lib/index.d.ts",
|
|
17
17
|
"repository": "git@github.com:panates/ts-gems.git",
|
|
18
18
|
"author": "Eray Hanoglu <e.hanoglu@panates.com>",
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"scripts": {
|
|
21
|
-
"test:common": "jest --clearCache && jest --config=./
|
|
22
|
-
"test:strict-null": "jest --clearCache && jest --config=./
|
|
21
|
+
"test:common": "jest --clearCache && jest --config=./jest.config.js",
|
|
22
|
+
"test:strict-null": "jest --clearCache && jest --config=./jest.strict-null.config.js",
|
|
23
23
|
"test": "npm run test:common && npm run test:strict-null",
|
|
24
24
|
"release": "npm run test && npm publish"
|
|
25
25
|
},
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"typescript": ">=4.0.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@types/jest": "^27.0.
|
|
36
|
-
"prettier": "^2.
|
|
37
|
-
"ts-jest": "^27.
|
|
38
|
-
"typescript": "^4.4
|
|
35
|
+
"@types/jest": "^27.0.3",
|
|
36
|
+
"prettier": "^2.5.1",
|
|
37
|
+
"ts-jest": "^27.1.2",
|
|
38
|
+
"typescript": "^4.5.4"
|
|
39
39
|
}
|
|
40
40
|
}
|
package/lib/omit.d.ts
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/** Like Partial but recursive */
|
|
2
|
-
import {Builtin} from './common';
|
|
3
|
-
import {IsTuple} from './type-check';
|
|
4
|
-
import {OptionalKeys, ReadonlyKeys, RequiredKeys, TypeKeys, WritableKeys} from './keys';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Omit all optional properties in object type
|
|
8
|
-
*/
|
|
9
|
-
export type OmitOptional<T> = Omit<T, OptionalKeys<T>>;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Omit all required properties in object type
|
|
13
|
-
*/
|
|
14
|
-
export type OmitRequired<T> = Omit<T, RequiredKeys<T>>;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Omit all readonly properties in object type
|
|
18
|
-
*/
|
|
19
|
-
export type OmitReadonly<T> = Omit<T, ReadonlyKeys<T>>;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Omit all writable properties in object type
|
|
23
|
-
*/
|
|
24
|
-
export type OmitWritable<T> = Omit<T, WritableKeys<T>>;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Omit all properties of given type in object type
|
|
28
|
-
*/
|
|
29
|
-
export type OmitType<T, S> = Omit<T, TypeKeys<T, S>>;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Omit all optional properties in T deeply
|
|
34
|
-
*/
|
|
35
|
-
export type DeepOmitOptional<T> =
|
|
36
|
-
T extends Builtin ? T
|
|
37
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepOmitOptional<V>>
|
|
38
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitOptional<V>>
|
|
39
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitOptional<V>>
|
|
40
|
-
: T extends Set<infer U> ? Set<DeepOmitOptional<U>>
|
|
41
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitOptional<U>>
|
|
42
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepOmitOptional<U>>
|
|
43
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
44
|
-
? { [K in ReadonlyKeys<T>]?: DeepOmitOptional<T[K]> } : (DeepOmitOptional<U>)[]
|
|
45
|
-
: T extends Promise<infer U> ? Promise<DeepOmitOptional<U>>
|
|
46
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepOmitOptional<T[K]> }
|
|
47
|
-
: OmitOptional<T>;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Omit all non optional properties in T deeply
|
|
52
|
-
*/
|
|
53
|
-
export type DeepOmitRequired<T> =
|
|
54
|
-
T extends Builtin ? T
|
|
55
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepOmitRequired<V>>
|
|
56
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitRequired<V>>
|
|
57
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitRequired<V>>
|
|
58
|
-
: T extends Set<infer U> ? Set<DeepOmitRequired<U>>
|
|
59
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitRequired<U>>
|
|
60
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepOmitRequired<U>>
|
|
61
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
62
|
-
? { [K in ReadonlyKeys<T>]?: DeepOmitRequired<T[K]> } : (DeepOmitRequired<U>)[]
|
|
63
|
-
: T extends Promise<infer U> ? Promise<DeepOmitRequired<U>>
|
|
64
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepOmitRequired<T[K]> }
|
|
65
|
-
: OmitRequired<T>;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Omit all readonly properties in T deeply
|
|
69
|
-
*/
|
|
70
|
-
export type DeepOmitReadonly<T> =
|
|
71
|
-
T extends Builtin ? T
|
|
72
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepOmitReadonly<V>>
|
|
73
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitReadonly<V>>
|
|
74
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitReadonly<V>>
|
|
75
|
-
: T extends Set<infer U> ? Set<DeepOmitReadonly<U>>
|
|
76
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitReadonly<U>>
|
|
77
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepOmitReadonly<U>>
|
|
78
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
79
|
-
? { [K in ReadonlyKeys<T>]?: DeepOmitReadonly<T[K]> } : (DeepOmitReadonly<U>)[]
|
|
80
|
-
: T extends Promise<infer U> ? Promise<DeepOmitReadonly<U>>
|
|
81
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepOmitReadonly<T[K]> }
|
|
82
|
-
: OmitReadonly<T>;
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Omit all non readonly properties in T deeply
|
|
86
|
-
*/
|
|
87
|
-
export type DeepOmitWritable<T> =
|
|
88
|
-
T extends Builtin ? T
|
|
89
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepOmitWritable<V>>
|
|
90
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitWritable<V>>
|
|
91
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitWritable<V>>
|
|
92
|
-
: T extends Set<infer U> ? Set<DeepOmitWritable<U>>
|
|
93
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitWritable<U>>
|
|
94
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepOmitWritable<U>>
|
|
95
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
96
|
-
? { [K in WritableKeys<T>]?: DeepOmitWritable<T[K]> } : (DeepOmitWritable<U>)[]
|
|
97
|
-
: T extends Promise<infer U> ? Promise<DeepOmitWritable<U>>
|
|
98
|
-
: T extends {} ? { [K in WritableKeys<T>]?: DeepOmitWritable<T[K]> }
|
|
99
|
-
: OmitWritable<T>;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Omit properties in given type in T deeply
|
|
103
|
-
*/
|
|
104
|
-
export type DeepOmitType<T, S> =
|
|
105
|
-
T extends Builtin ? T
|
|
106
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepOmitType<V, S>>
|
|
107
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitType<V, S>>
|
|
108
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitType<V, S>>
|
|
109
|
-
: T extends Set<infer U> ? Set<DeepOmitType<U, S>>
|
|
110
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitType<U, S>>
|
|
111
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepOmitType<U, S>>
|
|
112
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
113
|
-
? { [K in ReadonlyKeys<T>]?: DeepOmitType<T[K], S> } : (DeepOmitType<U, S>)[]
|
|
114
|
-
: T extends Promise<infer U> ? Promise<DeepOmitType<U, S>>
|
|
115
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepOmitType<T[K], S> }
|
|
116
|
-
: OmitType<T, S>;
|
package/lib/pick.d.ts
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/** Like Partial but recursive */
|
|
2
|
-
import {Builtin} from './common';
|
|
3
|
-
import {IsTuple} from './type-check';
|
|
4
|
-
import {OptionalKeys, ReadableKeys, ReadonlyKeys, RequiredKeys, TypeKeys, WritableKeys} from './keys';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Pick all optional properties in object type
|
|
8
|
-
*/
|
|
9
|
-
export type PickOptional<T> = Pick<T, OptionalKeys<T>>;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Pick all required properties in object type
|
|
13
|
-
*/
|
|
14
|
-
export type PickRequired<T> = Pick<T, RequiredKeys<T>>;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Pick all readonly properties in object type
|
|
18
|
-
*/
|
|
19
|
-
export type PickReadonly<T> = Pick<T, ReadonlyKeys<T>>;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Pick all readable properties in object type
|
|
23
|
-
*/
|
|
24
|
-
export type PickReadable<T> = Pick<T, ReadableKeys<T>>;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Pick all writable properties in object type
|
|
28
|
-
*/
|
|
29
|
-
export type PickWritable<T> = Pick<T, WritableKeys<T>>;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Pick all properties of given type in object type
|
|
33
|
-
*/
|
|
34
|
-
export type PickType<T, S> = Pick<T, TypeKeys<T, S>>;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Pick all optional properties in T deeply
|
|
38
|
-
*/
|
|
39
|
-
export type DeepPickOptional<T> =
|
|
40
|
-
T extends Builtin ? T
|
|
41
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepPickOptional<V>>
|
|
42
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickOptional<V>>
|
|
43
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickOptional<V>>
|
|
44
|
-
: T extends Set<infer U> ? Set<DeepPickOptional<U>>
|
|
45
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickOptional<U>>
|
|
46
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepPickOptional<U>>
|
|
47
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
48
|
-
? { [K in ReadonlyKeys<T>]?: DeepPickOptional<T[K]> } : (DeepPickOptional<U>)[]
|
|
49
|
-
: T extends Promise<infer U> ? Promise<DeepPickOptional<U>>
|
|
50
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepPickOptional<T[K]> }
|
|
51
|
-
: PickOptional<T>;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Pick all non optional properties in T deeply
|
|
56
|
-
*/
|
|
57
|
-
export type DeepPickRequired<T> =
|
|
58
|
-
T extends Builtin ? T
|
|
59
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepPickRequired<V>>
|
|
60
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickRequired<V>>
|
|
61
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickRequired<V>>
|
|
62
|
-
: T extends Set<infer U> ? Set<DeepPickRequired<U>>
|
|
63
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickRequired<U>>
|
|
64
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepPickRequired<U>>
|
|
65
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
66
|
-
? { [K in ReadonlyKeys<T>]?: DeepPickRequired<T[K]> } : (DeepPickRequired<U>)[]
|
|
67
|
-
: T extends Promise<infer U> ? Promise<DeepPickRequired<U>>
|
|
68
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepPickRequired<T[K]> }
|
|
69
|
-
: PickRequired<T>;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Pick all readonly properties in T deeply
|
|
73
|
-
*/
|
|
74
|
-
export type DeepPickReadonly<T> =
|
|
75
|
-
T extends Builtin ? T
|
|
76
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepPickReadonly<V>>
|
|
77
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickReadonly<V>>
|
|
78
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickReadonly<V>>
|
|
79
|
-
: T extends Set<infer U> ? Set<DeepPickReadonly<U>>
|
|
80
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickReadonly<U>>
|
|
81
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepPickReadonly<U>>
|
|
82
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
83
|
-
? { [K in ReadonlyKeys<T>]?: DeepPickReadonly<T[K]> } : (DeepPickReadonly<U>)[]
|
|
84
|
-
: T extends Promise<infer U> ? Promise<DeepPickReadonly<U>>
|
|
85
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepPickReadonly<T[K]> }
|
|
86
|
-
: PickReadonly<T>;
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Pick all non readonly properties in T deeply
|
|
90
|
-
*/
|
|
91
|
-
export type DeepPickWritable<T> =
|
|
92
|
-
T extends Builtin ? T
|
|
93
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepPickWritable<V>>
|
|
94
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickWritable<V>>
|
|
95
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickWritable<V>>
|
|
96
|
-
: T extends Set<infer U> ? Set<DeepPickWritable<U>>
|
|
97
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickWritable<U>>
|
|
98
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepPickWritable<U>>
|
|
99
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
100
|
-
? { [K in WritableKeys<T>]?: DeepPickWritable<T[K]> } : (DeepPickWritable<U>)[]
|
|
101
|
-
: T extends Promise<infer U> ? Promise<DeepPickWritable<U>>
|
|
102
|
-
: T extends {} ? { [K in WritableKeys<T>]?: DeepPickWritable<T[K]> }
|
|
103
|
-
: PickWritable<T>;
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Pick properties in given type in T deeply
|
|
107
|
-
*/
|
|
108
|
-
export type DeepPickType<T, S> =
|
|
109
|
-
T extends Builtin ? T
|
|
110
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepPickType<V, S>>
|
|
111
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPickType<V, S>>
|
|
112
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPickType<V, S>>
|
|
113
|
-
: T extends Set<infer U> ? Set<DeepPickType<U, S>>
|
|
114
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPickType<U, S>>
|
|
115
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepPickType<U, S>>
|
|
116
|
-
: T extends (infer U)[] ? T extends IsTuple<T>
|
|
117
|
-
? { [K in ReadonlyKeys<T>]?: DeepPickType<T[K], S> } : (DeepPickType<U, S>)[]
|
|
118
|
-
: T extends Promise<infer U> ? Promise<DeepPickType<U, S>>
|
|
119
|
-
: T extends {} ? { [K in ReadonlyKeys<T>]?: DeepPickType<T[K], S> }
|
|
120
|
-
: PickType<T, S>;
|