ts-gems 2.7.2 → 2.7.4
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 +3 -2
- package/lib/deep-buildable.d.ts +3 -3
- package/lib/deep-nullish.d.ts +3 -3
- package/lib/deep-omit.d.ts +9 -9
- package/lib/deep-partial.d.ts +3 -3
- package/lib/deep-pick.d.ts +10 -10
- package/lib/deep-readonly.d.ts +3 -3
- package/lib/deep-required.d.ts +3 -3
- package/lib/deep-writable.d.ts +3 -3
- package/lib/helpers.d.ts +2 -2
- package/lib/keys.d.ts +35 -30
- package/lib/type-check.d.ts +3 -2
- package/package.json +1 -1
package/lib/common.d.ts
CHANGED
|
@@ -24,8 +24,9 @@ type JsonType = BasicPrimitive | null | object | (BasicPrimitive | object)[]
|
|
|
24
24
|
* @desc Type representing Builtin types in JavaScript
|
|
25
25
|
*/
|
|
26
26
|
export type Builtin = Primitive | Function | String | Number | Date | Error | RegExp |
|
|
27
|
-
|
|
28
|
-
Int32Array | Uint32Array | Float32Array | Float64Array
|
|
27
|
+
Buffer | ArrayBuffer | Int8Array | Uint8Array | Uint8ClampedArray |
|
|
28
|
+
Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array |
|
|
29
|
+
URL | ReadableStream | WritableStream;
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* Maybe
|
package/lib/deep-buildable.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Combination of Partial and Writable but deeply
|
|
5
5
|
*/
|
|
6
6
|
export type DeepBuildable<T> = _DeepBuildable<T>;
|
|
7
7
|
type _DeepBuildable<T> =
|
|
8
|
-
|
|
8
|
+
IfNoDeepValue<T> extends true ? T
|
|
9
9
|
: { -readonly [P in keyof T]?: _DeepBuildable<Exclude<T[P], undefined>> };
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -14,6 +14,6 @@ type _DeepBuildable<T> =
|
|
|
14
14
|
export type HighDeepBuildable<T> = _HighDeepBuildable<T>;
|
|
15
15
|
type _HighDeepBuildable<T> =
|
|
16
16
|
T extends (infer U)[] ? _HighDeepBuildable<U>[]
|
|
17
|
-
:
|
|
17
|
+
: IfNoDeepValue<T> extends true ? T
|
|
18
18
|
: T extends (infer U)[] ? _HighDeepBuildable<U>[]
|
|
19
19
|
: { -readonly [P in keyof T]?: _HighDeepBuildable<Exclude<T[P], undefined>> };
|
package/lib/deep-nullish.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { DeepRequired, HighDeepRequired } from './deep-required.js';
|
|
2
|
-
import {
|
|
2
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Make all properties in T nullable deeply
|
|
6
6
|
*/
|
|
7
7
|
export type DeepNullish<T> = _DeepNullish<DeepRequired<T>>;
|
|
8
8
|
type _DeepNullish<T> =
|
|
9
|
-
|
|
9
|
+
IfNoDeepValue<T> extends true ? T
|
|
10
10
|
: { [P in keyof T]?: _DeepNullish<Exclude<T[P], undefined>> | null };
|
|
11
11
|
|
|
12
12
|
|
|
@@ -16,6 +16,6 @@ type _DeepNullish<T> =
|
|
|
16
16
|
export type HighDeepNullish<T> = _HighDeepNullish<HighDeepRequired<T>>;
|
|
17
17
|
type _HighDeepNullish<T> =
|
|
18
18
|
T extends (infer U)[] ? _HighDeepNullish<U>[]
|
|
19
|
-
:
|
|
19
|
+
: IfNoDeepValue<T> extends true ? T
|
|
20
20
|
: { [P in keyof T]?: _HighDeepNullish<Exclude<T[P], undefined>> | null };
|
|
21
21
|
|
package/lib/deep-omit.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
2
2
|
import { OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,7 +6,7 @@ import { OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
|
|
|
6
6
|
*/
|
|
7
7
|
export type DeepOmitOptional<T> = _DeepOmitOptional<Exclude<T, undefined>>;
|
|
8
8
|
type _DeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
|
|
9
|
-
|
|
9
|
+
IfNoDeepValue<T> extends true ? T
|
|
10
10
|
: { [P in K]-?: DeepOmitOptional<T[P]> };
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -15,7 +15,7 @@ type _DeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>>
|
|
|
15
15
|
export type HighDeepOmitOptional<T> = _HighDeepOmitOptional<Exclude<T, undefined>>;
|
|
16
16
|
type _HighDeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
|
|
17
17
|
T extends (infer U)[] ? HighDeepOmitOptional<U>[]
|
|
18
|
-
:
|
|
18
|
+
: IfNoDeepValue<T> extends true ? T
|
|
19
19
|
: { [P in K]-?: HighDeepOmitOptional<T[P]> };
|
|
20
20
|
|
|
21
21
|
|
|
@@ -24,7 +24,7 @@ type _HighDeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<
|
|
|
24
24
|
*/
|
|
25
25
|
export type DeepOmitRequired<T> = _DeepOmitRequired<Exclude<T, undefined>>;
|
|
26
26
|
type _DeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
|
|
27
|
-
|
|
27
|
+
IfNoDeepValue<T> extends true ? T
|
|
28
28
|
: { [P in J]?: DeepOmitRequired<Exclude<T[P], undefined>> };
|
|
29
29
|
|
|
30
30
|
|
|
@@ -34,7 +34,7 @@ type _DeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>>
|
|
|
34
34
|
export type HighDeepOmitRequired<T> = _HighDeepOmitRequired<Exclude<T, undefined>>;
|
|
35
35
|
type _HighDeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
|
|
36
36
|
T extends (infer U)[] ? HighDeepOmitRequired<U>[]
|
|
37
|
-
:
|
|
37
|
+
: IfNoDeepValue<T> extends true ? T
|
|
38
38
|
: { [P in J]?: HighDeepOmitRequired<Exclude<T[P], undefined>> };
|
|
39
39
|
|
|
40
40
|
|
|
@@ -43,7 +43,7 @@ type _HighDeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<
|
|
|
43
43
|
*/
|
|
44
44
|
export type DeepOmitReadonly<T> = _DeepOmitReadonly<Exclude<T, undefined>>;
|
|
45
45
|
type _DeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
|
|
46
|
-
|
|
46
|
+
IfNoDeepValue<T> extends true ? T
|
|
47
47
|
: { [P in J]: DeepOmitReadonly<T[P]> };
|
|
48
48
|
|
|
49
49
|
|
|
@@ -53,7 +53,7 @@ type _DeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>>
|
|
|
53
53
|
export type HighDeepOmitReadonly<T> = _HighDeepOmitReadonly<Exclude<T, undefined>>;
|
|
54
54
|
type _HighDeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
|
|
55
55
|
T extends (infer U)[] ? HighDeepOmitReadonly<U>[]
|
|
56
|
-
:
|
|
56
|
+
: IfNoDeepValue<T> extends true ? T
|
|
57
57
|
: { [P in J]: HighDeepOmitReadonly<T[P]> };
|
|
58
58
|
|
|
59
59
|
|
|
@@ -62,7 +62,7 @@ type _HighDeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<
|
|
|
62
62
|
*/
|
|
63
63
|
export type DeepOmitWritable<T> = _DeepOmitWritable<Exclude<T, undefined>>
|
|
64
64
|
type _DeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
|
|
65
|
-
|
|
65
|
+
IfNoDeepValue<T> extends true ? T
|
|
66
66
|
: { readonly [P in K]: DeepOmitWritable<T[P]> }
|
|
67
67
|
|
|
68
68
|
|
|
@@ -72,5 +72,5 @@ type _DeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>>
|
|
|
72
72
|
export type HighDeepOmitWritable<T> = _HighDeepOmitWritable<Exclude<T, undefined>>
|
|
73
73
|
type _HighDeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
|
|
74
74
|
T extends (infer U)[] ? HighDeepOmitWritable<U>[]
|
|
75
|
-
:
|
|
75
|
+
: IfNoDeepValue<T> extends true ? T
|
|
76
76
|
: { readonly [P in K]: HighDeepOmitWritable<T[P]> }
|
package/lib/deep-partial.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Partial but deeply
|
|
5
5
|
*/
|
|
6
6
|
export type DeepPartial<T> = _DeepPartial<T>;
|
|
7
7
|
type _DeepPartial<T> =
|
|
8
|
-
|
|
8
|
+
IfNoDeepValue<T> extends true ? T
|
|
9
9
|
: { [P in keyof T]?: _DeepPartial<Exclude<T[P], undefined>> };
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -14,5 +14,5 @@ type _DeepPartial<T> =
|
|
|
14
14
|
export type HighDeepPartial<T> = _HighDeepPartial<T>;
|
|
15
15
|
type _HighDeepPartial<T> =
|
|
16
16
|
T extends (infer U)[] ? _HighDeepPartial<U>[]
|
|
17
|
-
:
|
|
17
|
+
: IfNoDeepValue<T> extends true ? T
|
|
18
18
|
: { [P in keyof T]?: _HighDeepPartial<Exclude<T[P], undefined>> };
|
package/lib/deep-pick.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
2
2
|
import { JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,7 +6,7 @@ import { JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from
|
|
|
6
6
|
*/
|
|
7
7
|
export type DeepPickOptional<T> = _DeepPickOptional<Exclude<T, undefined>>;
|
|
8
8
|
type _DeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
9
|
-
|
|
9
|
+
IfNoDeepValue<T> extends true ? T
|
|
10
10
|
: { [P in K]?: DeepPickOptional<T[P]> };
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -15,7 +15,7 @@ type _DeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
|
15
15
|
export type HighDeepPickOptional<T> = _HighDeepPickOptional<Exclude<T, undefined>>;
|
|
16
16
|
type _HighDeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
17
17
|
T extends (infer U)[] ? HighDeepPickOptional<U>[]
|
|
18
|
-
:
|
|
18
|
+
: IfNoDeepValue<T> extends true ? T
|
|
19
19
|
: { [P in K]?: HighDeepPickOptional<T[P]> };
|
|
20
20
|
|
|
21
21
|
|
|
@@ -24,7 +24,7 @@ type _HighDeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
|
24
24
|
*/
|
|
25
25
|
export type DeepPickRequired<T> = _DeepPickRequired<Exclude<T, undefined>>;
|
|
26
26
|
type _DeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
27
|
-
|
|
27
|
+
IfNoDeepValue<T> extends true ? T
|
|
28
28
|
: { [P in J]-?: DeepPickRequired<T[P]> };
|
|
29
29
|
|
|
30
30
|
|
|
@@ -34,7 +34,7 @@ type _DeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
|
34
34
|
export type HighDeepPickRequired<T> = _HighDeepPickRequired<Exclude<T, undefined>>;
|
|
35
35
|
type _HighDeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
36
36
|
T extends (infer U)[] ? HighDeepPickRequired<U>[]
|
|
37
|
-
:
|
|
37
|
+
: IfNoDeepValue<T> extends true ? T
|
|
38
38
|
: { [P in J]-?: HighDeepPickRequired<T[P]> };
|
|
39
39
|
|
|
40
40
|
|
|
@@ -43,7 +43,7 @@ type _HighDeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
|
43
43
|
*/
|
|
44
44
|
export type DeepPickReadonly<T> = _DeepPickReadonly<Exclude<T, undefined>>;
|
|
45
45
|
type _DeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
|
|
46
|
-
|
|
46
|
+
IfNoDeepValue<T> extends true ? T
|
|
47
47
|
: { [P in K]: DeepPickReadonly<T[P]> };
|
|
48
48
|
|
|
49
49
|
/**
|
|
@@ -52,7 +52,7 @@ type _DeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
|
|
|
52
52
|
export type HighDeepPickReadonly<T> = _HighDeepPickReadonly<Exclude<T, undefined>>;
|
|
53
53
|
type _HighDeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
|
|
54
54
|
T extends (infer U)[] ? HighDeepPickReadonly<U>[]
|
|
55
|
-
:
|
|
55
|
+
: IfNoDeepValue<T> extends true ? T
|
|
56
56
|
: { [P in K]: HighDeepPickReadonly<T[P]> };
|
|
57
57
|
|
|
58
58
|
|
|
@@ -61,7 +61,7 @@ type _HighDeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
|
|
|
61
61
|
*/
|
|
62
62
|
export type DeepPickWritable<T> = _DeepPickWritable<Exclude<T, undefined>>;
|
|
63
63
|
type _DeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
64
|
-
|
|
64
|
+
IfNoDeepValue<T> extends true ? T
|
|
65
65
|
: { [P in K]: DeepPickWritable<T[P]> };
|
|
66
66
|
|
|
67
67
|
/**
|
|
@@ -70,7 +70,7 @@ type _DeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
|
70
70
|
export type HighDeepPickWritable<T> = _HighDeepPickWritable<Exclude<T, undefined>>;
|
|
71
71
|
type _HighDeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
72
72
|
T extends (infer U)[] ? HighDeepPickWritable<U>[]
|
|
73
|
-
:
|
|
73
|
+
: IfNoDeepValue<T> extends true ? T
|
|
74
74
|
: { [P in K]: HighDeepPickWritable<T[P]> };
|
|
75
75
|
|
|
76
76
|
|
|
@@ -80,5 +80,5 @@ type _HighDeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
|
80
80
|
export type DeepPickJson<T> = _DeepPickJson<Exclude<T, undefined>>;
|
|
81
81
|
type _DeepPickJson<T, Keys extends keyof T = JsonKeys<T>> =
|
|
82
82
|
T extends (infer U)[] ? DeepPickJson<U>[]
|
|
83
|
-
:
|
|
83
|
+
: IfNoDeepValue<T> extends true ? T
|
|
84
84
|
: { [P in Keys]: DeepPickJson<T[P]> };
|
package/lib/deep-readonly.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Make all properties in T readonly deeply
|
|
5
5
|
*/
|
|
6
6
|
export type DeepReadonly<T> = _DeepReadonly<T>;
|
|
7
7
|
type _DeepReadonly<T> =
|
|
8
|
-
|
|
8
|
+
IfNoDeepValue<T> extends true ? T
|
|
9
9
|
: { readonly [P in keyof T]: _DeepReadonly<T[P]> };
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -14,6 +14,6 @@ type _DeepReadonly<T> =
|
|
|
14
14
|
export type HighDeepReadonly<T> = _HighDeepReadonly<T>;
|
|
15
15
|
type _HighDeepReadonly<T> =
|
|
16
16
|
T extends (infer U)[] ? _HighDeepReadonly<U>[]
|
|
17
|
-
:
|
|
17
|
+
: IfNoDeepValue<T> extends true ? T
|
|
18
18
|
: { readonly [P in keyof T]: _HighDeepReadonly<T[P]> };
|
|
19
19
|
|
package/lib/deep-required.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Make all properties in T required deeply
|
|
5
5
|
*/
|
|
6
6
|
export type DeepRequired<T> = _DeepRequired<T>;
|
|
7
7
|
type _DeepRequired<T> =
|
|
8
|
-
|
|
8
|
+
IfNoDeepValue<T> extends true ? T
|
|
9
9
|
: { [P in keyof T]-?: _DeepRequired<Exclude<T[P], undefined>> };
|
|
10
10
|
|
|
11
11
|
|
|
@@ -15,5 +15,5 @@ type _DeepRequired<T> =
|
|
|
15
15
|
export type HighDeepRequired<T> = _HighDeepRequired<T>;
|
|
16
16
|
type _HighDeepRequired<T> =
|
|
17
17
|
T extends (infer U)[] ? _HighDeepRequired<U>[]
|
|
18
|
-
:
|
|
18
|
+
: IfNoDeepValue<T> extends true ? T
|
|
19
19
|
: { [P in keyof T]-?: _HighDeepRequired<Exclude<T[P], undefined>> };
|
package/lib/deep-writable.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IfNoDeepValue } from './helpers.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Make all properties in T writable deeply
|
|
5
5
|
*/
|
|
6
6
|
export type DeepWritable<T> = _DeepWritable<T>;
|
|
7
7
|
type _DeepWritable<T> =
|
|
8
|
-
|
|
8
|
+
IfNoDeepValue<T> extends true ? T
|
|
9
9
|
: { -readonly [P in keyof T]: _DeepWritable<T[P]> };
|
|
10
10
|
|
|
11
11
|
|
|
@@ -15,5 +15,5 @@ type _DeepWritable<T> =
|
|
|
15
15
|
export type HighDeepWritable<T> = _HighDeepWritable<T>;
|
|
16
16
|
type _HighDeepWritable<T> =
|
|
17
17
|
T extends (infer U)[] ? _HighDeepWritable<U>[]
|
|
18
|
-
:
|
|
18
|
+
: IfNoDeepValue<T> extends true ? T
|
|
19
19
|
: { -readonly [P in keyof T]: _HighDeepWritable<T[P]> };
|
package/lib/helpers.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ import { IfClass, IfTuple } from './type-check.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Returns true if T is excluded from deep operations
|
|
6
6
|
*/
|
|
7
|
-
export type
|
|
8
|
-
type
|
|
7
|
+
export type IfNoDeepValue<T> = _IfNoDeepValue<T>
|
|
8
|
+
type _IfNoDeepValue<T> =
|
|
9
9
|
T extends Builtin ? true
|
|
10
10
|
: IfTuple<T> extends true ? true
|
|
11
11
|
: IfClass<T> extends true ? true
|
package/lib/keys.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
IfEquals, IfCompatible, IfUndefined,
|
|
3
|
+
IfJson, IfNull, IfFunction
|
|
4
|
+
} from './type-check';
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
7
|
* KeyOf
|
|
@@ -17,31 +20,32 @@ export type ValuesOf<T> = T[keyof T];
|
|
|
17
20
|
* @desc Returns required keys of an object
|
|
18
21
|
*/
|
|
19
22
|
export type RequiredKeys<T> = _RequiredKeys<T>
|
|
20
|
-
export type _RequiredKeys<T> = {
|
|
23
|
+
export type _RequiredKeys<T> = ValuesOf<{
|
|
21
24
|
[K in keyof T]-?: IfUndefined<T[K]> extends true ? never
|
|
22
25
|
: T extends { [K1 in K]: any } ? K
|
|
23
26
|
: never
|
|
24
|
-
}
|
|
27
|
+
}>;
|
|
25
28
|
|
|
26
29
|
/**
|
|
27
30
|
* OptionalKeys
|
|
28
31
|
* @desc Returns optional keys of an object
|
|
29
32
|
*/
|
|
30
33
|
export type OptionalKeys<T> = _OptionalKeys<T>
|
|
31
|
-
export type _OptionalKeys<T> = {
|
|
34
|
+
export type _OptionalKeys<T> = ValuesOf<{
|
|
32
35
|
[K in keyof T]-?: IfUndefined<T[K]> extends true ? never
|
|
33
36
|
: T extends { [K1 in K]: any } ? never
|
|
34
37
|
: K
|
|
35
|
-
}
|
|
38
|
+
}>;
|
|
36
39
|
|
|
37
40
|
|
|
38
41
|
/**
|
|
39
42
|
* @desc Returns readonly keys of an object
|
|
40
43
|
*/
|
|
41
|
-
export type ReadonlyKeys<T> =
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
export type ReadonlyKeys<T> = _ReadonlyKeys<T>
|
|
45
|
+
type _ReadonlyKeys<T, J = Required<T>> = ValuesOf<{
|
|
46
|
+
[K in keyof J]: K extends symbol ? never
|
|
47
|
+
: IfEquals<{ [Q in K]: J[K] }, { -readonly [Q in K]: J[K] }, never, K>
|
|
48
|
+
}>;
|
|
45
49
|
|
|
46
50
|
/**
|
|
47
51
|
* @desc Returns JSON friendly keys of an object
|
|
@@ -52,56 +56,57 @@ type _JsonKeys<T, J = Required<T>> = ValuesOf<{
|
|
|
52
56
|
: IfNull<J[K]> extends true ? K
|
|
53
57
|
: IfJson<Exclude<J[K], undefined>> extends true ? K
|
|
54
58
|
: never
|
|
55
|
-
|
|
56
59
|
}>;
|
|
57
60
|
|
|
58
61
|
/**
|
|
59
62
|
* @desc Returns writable keys of an object
|
|
60
63
|
*/
|
|
61
|
-
export type WritableKeys<T> =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
export type WritableKeys<T> = _WritableKeys<T>;
|
|
65
|
+
type _WritableKeys<T> = ValuesOf<{
|
|
66
|
+
[K in keyof T]-?: K extends symbol ? never
|
|
67
|
+
: IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }, never, K>
|
|
68
|
+
}>;
|
|
64
69
|
|
|
65
70
|
|
|
66
71
|
/**
|
|
67
72
|
* @desc Returns writable json keys of an object
|
|
68
73
|
*/
|
|
69
|
-
export type WritableJsonKeys<T> = Extract<
|
|
70
|
-
[K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { -readonly [Q in K]: T[K] }, K, never>
|
|
71
|
-
}[keyof T], JsonKeys<T>>;
|
|
74
|
+
export type WritableJsonKeys<T> = Extract<WritableKeys<T>, JsonKeys<T>>;
|
|
72
75
|
|
|
73
76
|
/**
|
|
74
77
|
* @desc Returns Function keys of an object
|
|
75
78
|
*/
|
|
76
|
-
export type FunctionKeys<T> =
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
: never : never : never;
|
|
79
|
+
export type FunctionKeys<T> = _FunctionKeys<T>;
|
|
80
|
+
type _FunctionKeys<T> = ValuesOf<{
|
|
81
|
+
[K in keyof T]-?: K extends symbol ? never
|
|
82
|
+
: IfFunction<T[K]> extends true ? K : never;
|
|
81
83
|
}>;
|
|
82
84
|
|
|
83
85
|
/**
|
|
84
86
|
* @desc Returns non function keys of an object
|
|
85
87
|
*/
|
|
86
|
-
export type NonFunctionKeys<T> =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
: K : K : K;
|
|
88
|
+
export type NonFunctionKeys<T> = _NonFunctionKeys<T>;
|
|
89
|
+
type _NonFunctionKeys<T> = ValuesOf<{
|
|
90
|
+
[K in keyof T]-?: K extends symbol ? never
|
|
91
|
+
: IfFunction<T[K]> extends true ? never : K;
|
|
91
92
|
}>;
|
|
92
93
|
|
|
93
94
|
|
|
94
95
|
/**
|
|
95
96
|
* @desc Returns keys that match given type
|
|
96
97
|
*/
|
|
97
|
-
export type KeysCompatible<T, U> =
|
|
98
|
-
|
|
98
|
+
export type KeysCompatible<T, U> = _KeysCompatible<T, U>;
|
|
99
|
+
type _KeysCompatible<T, U> = ValuesOf<{
|
|
100
|
+
[K in keyof T]-?: K extends symbol ? never
|
|
101
|
+
: IfCompatible<T[K], U, K, never>;
|
|
99
102
|
}>;
|
|
100
103
|
|
|
101
104
|
/**
|
|
102
105
|
* @desc Returns keys that equals given type
|
|
103
106
|
*/
|
|
104
|
-
export type KeysEquals<T, U> =
|
|
105
|
-
|
|
107
|
+
export type KeysEquals<T, U> = _KeysEquals<T, U>;
|
|
108
|
+
type _KeysEquals<T, U> = ValuesOf<{
|
|
109
|
+
[K in keyof T]-?: K extends symbol ? never
|
|
110
|
+
: IfEquals<T[K], U, K, never>;
|
|
106
111
|
}>;
|
|
107
112
|
|
package/lib/type-check.d.ts
CHANGED
|
@@ -113,8 +113,9 @@ export type IfFunction<T, Y = true, N = false> =
|
|
|
113
113
|
IfNever<T> extends true ? N
|
|
114
114
|
: IfUndefined<T> extends true ? N
|
|
115
115
|
: IfNull<T> extends true ? N
|
|
116
|
-
: T extends
|
|
117
|
-
:
|
|
116
|
+
: T extends Type ? N
|
|
117
|
+
: T extends Function ? Y
|
|
118
|
+
: N;
|
|
118
119
|
|
|
119
120
|
export type IfFunctionOrAny<T, Y = true, N = false> =
|
|
120
121
|
IfAny<T> extends true ? Y : IfFunction<T, Y, N>;
|