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 CHANGED
@@ -1,19 +1,83 @@
1
- export type Primitive = string | number | boolean | null | bigint | symbol | undefined;
2
- export type Builtin = Primitive | Function | Date | Error | RegExp;
3
- export type NonObj = Primitive | Function;
4
- export type NonSymbol = Exclude<Builtin, symbol>;
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
- export type Awaited<T> = T extends PromiseLike<infer PT> ? PT : T;
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
@@ -1,6 +1,6 @@
1
1
  export * from "./common";
2
2
  export * from "./keys";
3
- export * from "./modify";
4
- export * from "./omit";
5
- export * from "./pick";
6
3
  export * from "./type-check";
4
+ export * from "./modify";
5
+ export * from "./deep-pick";
6
+ export * from "./deep-omit";
package/lib/keys.ts CHANGED
@@ -1,48 +1,89 @@
1
- import {IfEquals, IsUndefined} from './type-check';
1
+ import {IfEquals, IfCompatible, IfUndefined, IfAny, IfJson} from './type-check';
2
2
 
3
3
  /**
4
- * Gets optional keys of an object
4
+ * KeyOf
5
+ * @desc Returns the union type of all the keys in a type
5
6
  */
6
- export type OptionalKeys<T> = {
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
- }[keyof T];
22
+ }>;
9
23
 
10
24
  /**
11
- * Gets required keys of an object
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
- * Gets Function keys of an object
31
+ * @desc Returns readonly keys of an object
17
32
  */
18
- export type FunctionKeys<T> = {
19
- [K in keyof T]-?: IsUndefined<T[K]> extends false ?
20
- T[K] extends Function ? K : never : never;
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
- * Gets readonly keys of an object
38
+ * @desc Returns non function keys of an object
25
39
  */
26
- export type ReadonlyKeys<T> = {
27
- [K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { -readonly [Q in K]: T[K] }, never, K>
28
- }[keyof T];
40
+ export type NonFunctionKeys<T> = Exclude<keyof T, FunctionKeys<T>>;
41
+
29
42
 
30
43
  /**
31
- * Gets readable keys of an object
44
+ * @desc Returns non function keys of an object
32
45
  */
33
- export type ReadableKeys<T> = Exclude<keyof T, FunctionKeys<T>>;
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
- * Gets writable keys of an object
54
+ * @desc Returns writable keys of an object
37
55
  */
38
- export type WritableKeys<T> = Exclude<{
39
- [K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { -readonly [Q in K]: T[K] }, K>
40
- }[keyof T], FunctionKeys<T>>;
56
+ export type WritableKeys<T> = Exclude<keyof T, ReadonlyKeys<T>>;
57
+
41
58
 
42
59
  /**
43
- * Gets keys that matches V of T
60
+ * @desc Returns writable json keys of an object
44
61
  */
45
- type _TypeKeys<T, V> = {
46
- [K in keyof T]: IfEquals<T[K], V, K, never>
47
- }[keyof T];
48
- export type TypeKeys<T, V> = _TypeKeys<Required<T>, V>;
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
-
@@ -1,110 +1,162 @@
1
- import {NonObj} from './common';
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 "never", N otherwise
6
+ * Returns Y if typeof T is "any", N otherwise
10
7
  */
11
- export type IfNever<T, Y, N = never> = [T] extends [never] ? Y : N;
8
+ export type IfAny<T, Y = true, N = false> =
9
+ 0 extends 1 & T ? Y : N;
12
10
 
13
11
  /**
14
- * Returns true if typeof T is "never", false otherwise
12
+ * Returns "Y" if "T" is "never", "N" otherwise
15
13
  */
16
- export type IsNever<T> = IfNever<T, true, false>;
14
+ export type IfNever<T, Y = true, N = false> =
15
+ [T] extends [never] ? Y : N;
17
16
 
18
17
  /**
19
- * Returns Y if typeof T is "any", N otherwise
18
+ * Returns Y if T is undefined, N otherwise
20
19
  */
21
- export type IfAny<T, Y = T, N = never> = 0 extends (1 & T) ? Y : N;
20
+ export type IfUndefined<T, Y = true, N = false> =
21
+ IfEquals<T, undefined, Y, N>;
22
22
 
23
23
  /**
24
- * Returns true if typeof T is "any", false otherwise
24
+ * Returns Y if typeof T is "unknown", N otherwise
25
25
  */
26
- export type IsAny<T> = IfAny<T, true, false>;
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 "unknown", N otherwise
30
+ * Returns Y if typeof T is null, N otherwise
30
31
  */
31
- export type IfUnknown<T, Y, N = never> =
32
- unknown extends T ?
33
- IsAny<T> extends false
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 true if typeof T is "unknown", false otherwise
36
+ * Returns Y if typeof T is null, N otherwise
39
37
  */
40
- export type IsUnknown<T> = IfUnknown<T, true, false>;
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 = T, N = never> =
46
- IsNever<T> extends true
47
- ? N
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 true if typeof T is a tuple, false otherwise
56
+ * Returns Y if typeof T is "Primitive", N otherwise
54
57
  */
55
- export type IsTuple<T> = IfTuple<T, true, false>;
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
- * Returns Y if typeof T is an object, N otherwise
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 true if typeof T is an object, false otherwise
69
+ * Returns Y if typeof T is JSON like, N otherwise
70
70
  */
71
- export type IsObject<T> = IfObject<T, true, false>;
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 extends {}, Y = T, N = never> =
77
- IsNever<T> extends true
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 true if typeof T is an empty object, false otherwise
94
+ * Returns Y if typeof T is an object, N otherwise
85
95
  */
86
- export type IsEmptyObject<T extends {}> = IfEmptyObject<T, true, false>;
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 T1 is exactly same with T2, N otherwise
108
+ * Returns Y if typeof T is an empty object, N otherwise
91
109
  */
92
- type IfEquals<T1, T2, Y = T1, N = never> =
93
- (<G>() => G extends T1 ? 1 : 2) extends (<G>() => G extends T2 ? 1 : 2) ? Y : N;
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 true if T1 is exactly same with T2, false otherwise
121
+ * Returns Y if typeof T is an empty object, N otherwise
97
122
  */
98
- export type IsEquals<T1, T2> = IfEquals<T1, T2, true, false>;
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
- export type IfUndefined<T, Y = T, N = never> =
105
- T extends undefined ? Y: N;
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 true if T is undefined type
109
- */
110
- export type IsUndefined<T> = IfUndefined<T, true, false>;
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.3",
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=./test/jest.config.js",
22
- "test:strict-null": "jest --clearCache && jest --config=./test/jest.strict-null.config.js",
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.2",
36
- "prettier": "^2.4.1",
37
- "ts-jest": "^27.0.5",
38
- "typescript": "^4.4.3"
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>;