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 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
- ArrayBuffer | DataView | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array |
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
@@ -1,11 +1,11 @@
1
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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>> };
@@ -1,12 +1,12 @@
1
1
  import { DeepRequired, HighDeepRequired } from './deep-required.js';
2
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
19
+ : IfNoDeepValue<T> extends true ? T
20
20
  : { [P in keyof T]?: _HighDeepNullish<Exclude<T[P], undefined>> | null };
21
21
 
@@ -1,4 +1,4 @@
1
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
75
+ : IfNoDeepValue<T> extends true ? T
76
76
  : { readonly [P in K]: HighDeepOmitWritable<T[P]> }
@@ -1,11 +1,11 @@
1
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
17
+ : IfNoDeepValue<T> extends true ? T
18
18
  : { [P in keyof T]?: _HighDeepPartial<Exclude<T[P], undefined>> };
@@ -1,4 +1,4 @@
1
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
83
+ : IfNoDeepValue<T> extends true ? T
84
84
  : { [P in Keys]: DeepPickJson<T[P]> };
@@ -1,11 +1,11 @@
1
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
17
+ : IfNoDeepValue<T> extends true ? T
18
18
  : { readonly [P in keyof T]: _HighDeepReadonly<T[P]> };
19
19
 
@@ -1,11 +1,11 @@
1
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
18
+ : IfNoDeepValue<T> extends true ? T
19
19
  : { [P in keyof T]-?: _HighDeepRequired<Exclude<T[P], undefined>> };
@@ -1,11 +1,11 @@
1
- import { IsDeepExcluded } from './helpers.js';
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
- IsDeepExcluded<T> extends true ? T
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
- : IsDeepExcluded<T> extends true ? T
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 IsDeepExcluded<T> = _IsHighDeepObject<T>;
8
- type _IsHighDeepObject<T> =
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 { IfEquals, IfCompatible, IfUndefined, IfAny, IfJson, IfNull } from './type-check';
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
- }[keyof T];
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
- }[keyof T];
38
+ }>;
36
39
 
37
40
 
38
41
  /**
39
42
  * @desc Returns readonly keys of an object
40
43
  */
41
- export type ReadonlyKeys<T> = {
42
- [K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { -readonly [Q in K]: T[K] }, never, K>
43
- }[keyof T];
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
- [K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }, never, K>
63
- }[keyof T];
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> = ValuesOf<{
77
- [K in keyof T]-?: IfUndefined<T[K]> extends false ?
78
- IfAny<T[K]> extends false
79
- ? T[K] extends Function ? K
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> = ValuesOf<{
87
- [K in keyof T]-?: IfUndefined<T[K]> extends false ?
88
- IfAny<T[K]> extends false
89
- ? T[K] extends Function ? never
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> = ValuesOf<{
98
- [K in keyof T]-?: IfCompatible<T[K], U, K, never>;
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> = ValuesOf<{
105
- [K in keyof T]-?: IfEquals<T[K], U, K, never>;
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
 
@@ -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 Function ? Y
117
- : N;
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>;
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "lodash",
13
13
  "underscore"
14
14
  ],
15
- "version": "2.7.2",
15
+ "version": "2.7.4",
16
16
  "types": "lib/index.d.ts",
17
17
  "main": "lib/index.js",
18
18
  "module": "lib/index.js",