hotypes 0.4.8 → 0.5.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.
Files changed (72) hide show
  1. package/README.md +30 -39
  2. package/lib/function-keys.d.ts +2 -2
  3. package/lib/index.d.ts +17 -11
  4. package/lib/index.js +17 -11
  5. package/lib/index.js.map +1 -1
  6. package/lib/keys-by-exact-type.d.ts +4 -0
  7. package/lib/{map-props-extend-type.js → keys-by-exact-type.js} +1 -1
  8. package/lib/keys-by-exact-type.js.map +1 -0
  9. package/lib/keys-by-type.d.ts +1 -2
  10. package/lib/keys-exclude-by-exact-type.d.ts +2 -0
  11. package/lib/keys-exclude-by-exact-type.js +3 -0
  12. package/lib/keys-exclude-by-exact-type.js.map +1 -0
  13. package/lib/map-all-props.d.ts +3 -0
  14. package/lib/{replace-type.js → map-all-props.js} +1 -1
  15. package/lib/map-all-props.js.map +1 -0
  16. package/lib/map-nullable-props-to-optional.d.ts +2 -2
  17. package/lib/map-props-by-exact-type.d.ts +4 -0
  18. package/lib/{omit-props-extend-type.js → map-props-by-exact-type.js} +1 -1
  19. package/lib/map-props-by-exact-type.js.map +1 -0
  20. package/lib/map-props-by-type.d.ts +1 -2
  21. package/lib/{map-props-by-key-to-non-optional.d.ts → map-props-to-non-optional-by-key.d.ts} +1 -1
  22. package/lib/{map-props-by-key-to-non-optional.js → map-props-to-non-optional-by-key.js} +1 -1
  23. package/lib/map-props-to-non-optional-by-key.js.map +1 -0
  24. package/lib/{map-props-by-key-to-optional.d.ts → map-props-to-optional-by-key.d.ts} +1 -1
  25. package/lib/{map-props-by-key-to-optional.js → map-props-to-optional-by-key.js} +1 -1
  26. package/lib/map-props-to-optional-by-key.js.map +1 -0
  27. package/lib/non-nullable-keys.d.ts +2 -2
  28. package/lib/nullable-keys.d.ts +2 -2
  29. package/lib/omit-props-by-exact-type.d.ts +2 -0
  30. package/lib/{keys-exclude-extend-type.js → omit-props-by-exact-type.js} +1 -1
  31. package/lib/omit-props-by-exact-type.js.map +1 -0
  32. package/lib/optional-keys.d.ts +2 -2
  33. package/lib/pick-non-never.d.ts +2 -2
  34. package/lib/replace-props-by-key.d.ts +2 -2
  35. package/lib/replace-props-by-type.d.ts +3 -3
  36. package/lib/replace.d.ts +1 -0
  37. package/lib/{map-props.js → replace.js} +1 -1
  38. package/lib/replace.js.map +1 -0
  39. package/lib/return-type-of-constructor.d.ts +1 -1
  40. package/lib/unpacked-array-like.d.ts +1 -0
  41. package/lib/unpacked-array-like.js +3 -0
  42. package/lib/unpacked-array-like.js.map +1 -0
  43. package/lib/unpacked-array.d.ts +1 -0
  44. package/lib/{keys-extend-type.js → unpacked-array.js} +1 -1
  45. package/lib/unpacked-array.js.map +1 -0
  46. package/lib/unpacked-async-iterable.d.ts +1 -0
  47. package/lib/unpacked-async-iterable.js +3 -0
  48. package/lib/unpacked-async-iterable.js.map +1 -0
  49. package/lib/unpacked-iterable.d.ts +1 -0
  50. package/lib/unpacked-iterable.js +3 -0
  51. package/lib/unpacked-iterable.js.map +1 -0
  52. package/lib/unpacked-promise-like.d.ts +1 -0
  53. package/lib/unpacked-promise-like.js +3 -0
  54. package/lib/unpacked-promise-like.js.map +1 -0
  55. package/lib/unpacked-promise.d.ts +1 -0
  56. package/lib/unpacked-promise.js +3 -0
  57. package/lib/unpacked-promise.js.map +1 -0
  58. package/package.json +7 -7
  59. package/lib/keys-exclude-extend-type.d.ts +0 -2
  60. package/lib/keys-exclude-extend-type.js.map +0 -1
  61. package/lib/keys-extend-type.d.ts +0 -3
  62. package/lib/keys-extend-type.js.map +0 -1
  63. package/lib/map-props-by-key-to-non-optional.js.map +0 -1
  64. package/lib/map-props-by-key-to-optional.js.map +0 -1
  65. package/lib/map-props-extend-type.d.ts +0 -3
  66. package/lib/map-props-extend-type.js.map +0 -1
  67. package/lib/map-props.d.ts +0 -3
  68. package/lib/map-props.js.map +0 -1
  69. package/lib/omit-props-extend-type.d.ts +0 -2
  70. package/lib/omit-props-extend-type.js.map +0 -1
  71. package/lib/replace-type.d.ts +0 -1
  72. package/lib/replace-type.js.map +0 -1
package/README.md CHANGED
@@ -1,26 +1,12 @@
1
1
  # hotypes
2
2
  Higher-order types for TypeScript in the real world.
3
3
 
4
- ## Motivation
5
-
6
- > [TypeScripts type system is Turing-complete.](https://github.com/microsoft/TypeScript/issues/14833)
7
-
8
- If you don't follow the real-world use cases to create higher-order types,
9
- you will create a lot of useless new macros.
10
-
11
- > Some people, when confronted with a type problem, think "I know, I'll use advanced types." Now they have two type problems.
12
-
13
- Higher-order types are difficult,
14
- so we should not further complicate or mystify them.
15
-
16
- ## The difference with [justypes]
17
-
18
- hotypes are more like verbs or operators.
19
-
20
- [justypes]: https://www.npmjs.com/package/justypes
4
+ `hotypes` contains these types:
5
+ - A new type is a modified type from another type.
6
+ - A new type is an operator or a function.
7
+ - A new type is an internal type extractor.
21
8
 
22
9
  ## Install
23
-
24
10
  ```sh
25
11
  npm install --save hotypes
26
12
  # or
@@ -28,38 +14,43 @@ yarn add hotypes
28
14
  ```
29
15
 
30
16
  ## API
31
-
32
- It is highly recommended to read test cases to make sure you understand what types exactly do.
33
-
34
17
  - Equals
35
- - FunctionKeys
36
18
  - Head
19
+ - Last
20
+ - Tail
21
+ - FunctionKeys
22
+ - NonNullableKeys
23
+ - NullableKeys
24
+ - OptionalKeys
37
25
  - KeysByType
26
+ - KeysByExactType
38
27
  - KeysExcludeByType
39
- - KeysExcludeExtendType
40
- - KeysExtendType
41
- - Last
42
- - MapNullablePropsToOptionalNullable
43
- - MapNullablePropsToOptional
44
- - MapProps
45
- - MapPropsByKeyToNonOptional
46
- - MapPropsByKeyToOptional
28
+ - KeysExcludeByExactType
29
+ - MapAllProps
47
30
  - MapPropsByKey
48
31
  - MapPropsByType
49
- - MapPropsExtendType
32
+ - MapPropsByExactType
33
+ - MapNullablePropsToOptionalNullable
34
+ - MapNullablePropsToOptional
35
+ - MapPropsToNonOptionalByKey
36
+ - MapPropsToOptionalByKey
50
37
  - MapPropsToNonNullable
51
38
  - Mixin
52
39
  - MixinAll
53
- - NonNullableKeys
54
- - NullableKeys
55
- - OmitPropsByType
56
- - OmitPropsExtendType
57
- - OptionalKeys
58
40
  - PickNonNever
41
+ - OmitPropsByType
42
+ - OmitPropsByExactType
43
+ - Replace
59
44
  - ReplacePropsByKey
60
45
  - ReplacePropsByType
61
- - ReplaceType
62
- - ReturnTypeOfConstructor
63
- - Tail
64
46
  - WithDefault
65
47
  - NonCallable
48
+ - ReturnTypeOfConstructor
49
+ - UnpackedArray
50
+ - UnpackedArrayLike
51
+ - UnpackedIterable
52
+ - UnpackedAsyncIterable
53
+ - UnpackedPromise
54
+ - UnpackedPromiseLike
55
+
56
+ *The `Unpacked` prefix comes from [this official article](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#type-inference-in-conditional-types)*
@@ -1,2 +1,2 @@
1
- import { KeysExtendType } from './keys-extend-type';
2
- export declare type FunctionKeys<T> = KeysExtendType<T, (...args: any) => any>;
1
+ import { KeysByType } from './keys-by-type';
2
+ export declare type FunctionKeys<T> = KeysByType<T, (...args: any) => any>;
package/lib/index.d.ts CHANGED
@@ -2,31 +2,37 @@ export * from './equals';
2
2
  export * from './function-keys';
3
3
  export * from './head';
4
4
  export * from './keys-by-type';
5
+ export * from './keys-by-exact-type';
5
6
  export * from './keys-exclude-by-type';
6
- export * from './keys-exclude-extend-type';
7
- export * from './keys-extend-type';
7
+ export * from './keys-exclude-by-exact-type';
8
8
  export * from './last';
9
- export * from './map-nullable-props-to-optional-nullable';
10
- export * from './map-nullable-props-to-optional';
11
- export * from './map-props';
12
- export * from './map-props-by-key-to-non-optional';
9
+ export * from './map-all-props';
13
10
  export * from './map-props-by-key';
14
11
  export * from './map-props-by-type';
15
- export * from './map-props-by-key-to-optional';
16
- export * from './map-props-extend-type';
12
+ export * from './map-props-by-exact-type';
13
+ export * from './map-nullable-props-to-optional-nullable';
14
+ export * from './map-nullable-props-to-optional';
15
+ export * from './map-props-to-optional-by-key';
16
+ export * from './map-props-to-non-optional-by-key';
17
17
  export * from './map-props-to-non-nullable';
18
18
  export * from './mixin';
19
19
  export * from './mixin-all';
20
20
  export * from './non-nullable-keys';
21
21
  export * from './nullable-keys';
22
22
  export * from './omit-props-by-type';
23
- export * from './omit-props-extend-type';
23
+ export * from './omit-props-by-exact-type';
24
24
  export * from './optional-keys';
25
25
  export * from './pick-non-never';
26
+ export * from './replace';
26
27
  export * from './replace-props-by-key';
27
28
  export * from './replace-props-by-type';
28
- export * from './replace-type';
29
- export * from './return-type-of-constructor';
30
29
  export * from './tail';
31
30
  export * from './with-default';
32
31
  export * from './non-callable';
32
+ export * from './return-type-of-constructor';
33
+ export * from './unpacked-array';
34
+ export * from './unpacked-array-like';
35
+ export * from './unpacked-iterable';
36
+ export * from './unpacked-async-iterable';
37
+ export * from './unpacked-promise-like';
38
+ export * from './unpacked-promise';
package/lib/index.js CHANGED
@@ -18,32 +18,38 @@ __exportStar(require("./equals"), exports);
18
18
  __exportStar(require("./function-keys"), exports);
19
19
  __exportStar(require("./head"), exports);
20
20
  __exportStar(require("./keys-by-type"), exports);
21
+ __exportStar(require("./keys-by-exact-type"), exports);
21
22
  __exportStar(require("./keys-exclude-by-type"), exports);
22
- __exportStar(require("./keys-exclude-extend-type"), exports);
23
- __exportStar(require("./keys-extend-type"), exports);
23
+ __exportStar(require("./keys-exclude-by-exact-type"), exports);
24
24
  __exportStar(require("./last"), exports);
25
- __exportStar(require("./map-nullable-props-to-optional-nullable"), exports);
26
- __exportStar(require("./map-nullable-props-to-optional"), exports);
27
- __exportStar(require("./map-props"), exports);
28
- __exportStar(require("./map-props-by-key-to-non-optional"), exports);
25
+ __exportStar(require("./map-all-props"), exports);
29
26
  __exportStar(require("./map-props-by-key"), exports);
30
27
  __exportStar(require("./map-props-by-type"), exports);
31
- __exportStar(require("./map-props-by-key-to-optional"), exports);
32
- __exportStar(require("./map-props-extend-type"), exports);
28
+ __exportStar(require("./map-props-by-exact-type"), exports);
29
+ __exportStar(require("./map-nullable-props-to-optional-nullable"), exports);
30
+ __exportStar(require("./map-nullable-props-to-optional"), exports);
31
+ __exportStar(require("./map-props-to-optional-by-key"), exports);
32
+ __exportStar(require("./map-props-to-non-optional-by-key"), exports);
33
33
  __exportStar(require("./map-props-to-non-nullable"), exports);
34
34
  __exportStar(require("./mixin"), exports);
35
35
  __exportStar(require("./mixin-all"), exports);
36
36
  __exportStar(require("./non-nullable-keys"), exports);
37
37
  __exportStar(require("./nullable-keys"), exports);
38
38
  __exportStar(require("./omit-props-by-type"), exports);
39
- __exportStar(require("./omit-props-extend-type"), exports);
39
+ __exportStar(require("./omit-props-by-exact-type"), exports);
40
40
  __exportStar(require("./optional-keys"), exports);
41
41
  __exportStar(require("./pick-non-never"), exports);
42
+ __exportStar(require("./replace"), exports);
42
43
  __exportStar(require("./replace-props-by-key"), exports);
43
44
  __exportStar(require("./replace-props-by-type"), exports);
44
- __exportStar(require("./replace-type"), exports);
45
- __exportStar(require("./return-type-of-constructor"), exports);
46
45
  __exportStar(require("./tail"), exports);
47
46
  __exportStar(require("./with-default"), exports);
48
47
  __exportStar(require("./non-callable"), exports);
48
+ __exportStar(require("./return-type-of-constructor"), exports);
49
+ __exportStar(require("./unpacked-array"), exports);
50
+ __exportStar(require("./unpacked-array-like"), exports);
51
+ __exportStar(require("./unpacked-iterable"), exports);
52
+ __exportStar(require("./unpacked-async-iterable"), exports);
53
+ __exportStar(require("./unpacked-promise-like"), exports);
54
+ __exportStar(require("./unpacked-promise"), exports);
49
55
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,kDAA+B;AAC/B,yCAAsB;AACtB,iDAA8B;AAC9B,yDAAsC;AACtC,6DAA0C;AAC1C,qDAAkC;AAClC,yCAAsB;AACtB,4EAAyD;AACzD,mEAAgD;AAChD,8CAA2B;AAC3B,qEAAkD;AAClD,qDAAkC;AAClC,sDAAmC;AACnC,iEAA8C;AAC9C,0DAAuC;AACvC,8DAA2C;AAC3C,0CAAuB;AACvB,8CAA2B;AAC3B,sDAAmC;AACnC,kDAA+B;AAC/B,uDAAoC;AACpC,2DAAwC;AACxC,kDAA+B;AAC/B,mDAAgC;AAChC,yDAAsC;AACtC,0DAAuC;AACvC,iDAA8B;AAC9B,+DAA4C;AAC5C,yCAAsB;AACtB,iDAA8B;AAC9B,iDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,kDAA+B;AAC/B,yCAAsB;AACtB,iDAA8B;AAC9B,uDAAoC;AACpC,yDAAsC;AACtC,+DAA4C;AAC5C,yCAAsB;AACtB,kDAA+B;AAC/B,qDAAkC;AAClC,sDAAmC;AACnC,4DAAyC;AACzC,4EAAyD;AACzD,mEAAgD;AAChD,iEAA8C;AAC9C,qEAAkD;AAClD,8DAA2C;AAC3C,0CAAuB;AACvB,8CAA2B;AAC3B,sDAAmC;AACnC,kDAA+B;AAC/B,uDAAoC;AACpC,6DAA0C;AAC1C,kDAA+B;AAC/B,mDAAgC;AAChC,4CAAyB;AACzB,yDAAsC;AACtC,0DAAuC;AACvC,yCAAsB;AACtB,iDAA8B;AAC9B,iDAA8B;AAC9B,+DAA4C;AAC5C,mDAAgC;AAChC,wDAAqC;AACrC,sDAAmC;AACnC,4DAAyC;AACzC,0DAAuC;AACvC,qDAAkC"}
@@ -0,0 +1,4 @@
1
+ import { Equals } from './equals';
2
+ export declare type KeysByExactType<T, Type> = {
3
+ [Key in keyof T]: Equals<T[Key], Type> extends true ? Key : never;
4
+ }[keyof T];
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=map-props-extend-type.js.map
3
+ //# sourceMappingURL=keys-by-exact-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys-by-exact-type.js","sourceRoot":"","sources":["../src/keys-by-exact-type.ts"],"names":[],"mappings":""}
@@ -1,4 +1,3 @@
1
- import { Equals } from './equals';
2
1
  export declare type KeysByType<T, Type> = {
3
- [Key in keyof T]: Equals<T[Key], Type> extends true ? Key : never;
2
+ [Key in keyof T]: T[Key] extends Type ? Key : Type extends T[Key] ? Key : never;
4
3
  }[keyof T];
@@ -0,0 +1,2 @@
1
+ import { KeysByExactType } from './keys-by-exact-type';
2
+ export declare type KeysExcludeByExactType<T, Type> = Exclude<keyof T, KeysByExactType<T, Type>>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=keys-exclude-by-exact-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys-exclude-by-exact-type.js","sourceRoot":"","sources":["../src/keys-exclude-by-exact-type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare type MapAllProps<T, NewType> = {
2
+ [Key in keyof T]: NewType;
3
+ };
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=replace-type.js.map
3
+ //# sourceMappingURL=map-all-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-all-props.js","sourceRoot":"","sources":["../src/map-all-props.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { MapPropsExtendType } from './map-props-extend-type';
1
+ import { MapPropsByType } from './map-props-by-type';
2
2
  import { NonNullableKeys } from './non-nullable-keys';
3
3
  import { NullableKeys } from './nullable-keys';
4
- export declare type MapNullablePropsToOptional<T> = Pick<T, NonNullableKeys<T>> & Partial<MapPropsExtendType<Pick<T, NullableKeys<T>>, null, undefined>>;
4
+ export declare type MapNullablePropsToOptional<T> = Pick<T, NonNullableKeys<T>> & Partial<MapPropsByType<Pick<T, NullableKeys<T>>, null, undefined>>;
@@ -0,0 +1,4 @@
1
+ import { Equals } from './equals';
2
+ export declare type MapPropsByExactType<T, OldType, NewType> = {
3
+ [Key in keyof T]: Equals<T[Key], OldType> extends true ? NewType : T[Key];
4
+ };
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=omit-props-extend-type.js.map
3
+ //# sourceMappingURL=map-props-by-exact-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-props-by-exact-type.js","sourceRoot":"","sources":["../src/map-props-by-exact-type.ts"],"names":[],"mappings":""}
@@ -1,4 +1,3 @@
1
- import { Equals } from './equals';
2
1
  export declare type MapPropsByType<T, OldType, NewType> = {
3
- [Key in keyof T]: Equals<T[Key], OldType> extends true ? NewType : T[Key];
2
+ [Key in keyof T]: T[Key] extends OldType ? Exclude<T[Key], OldType> | NewType : OldType extends T[Key] ? Exclude<T[Key], OldType> | NewType : T[Key];
4
3
  };
@@ -1,2 +1,2 @@
1
1
  import { OptionalKeys } from './optional-keys';
2
- export declare type MapPropsByKeyToNonOptional<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, OptionalKeys<T> | Keys>> & Partial<Pick<T, OptionalKeys<T>>> & Required<Pick<T, Keys>>;
2
+ export declare type MapPropsToNonOptionalByKey<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, OptionalKeys<T> | Keys>> & Partial<Pick<T, OptionalKeys<T>>> & Required<Pick<T, Keys>>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=map-props-by-key-to-non-optional.js.map
3
+ //# sourceMappingURL=map-props-to-non-optional-by-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-props-to-non-optional-by-key.js","sourceRoot":"","sources":["../src/map-props-to-non-optional-by-key.ts"],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
1
  import { OptionalKeys } from './optional-keys';
2
- export declare type MapPropsByKeyToOptional<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, Keys | OptionalKeys<T>>> & Partial<Pick<T, Keys | OptionalKeys<T>>>;
2
+ export declare type MapPropsToOptionalByKey<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, Keys | OptionalKeys<T>>> & Partial<Pick<T, Keys | OptionalKeys<T>>>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=map-props-by-key-to-optional.js.map
3
+ //# sourceMappingURL=map-props-to-optional-by-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-props-to-optional-by-key.js","sourceRoot":"","sources":["../src/map-props-to-optional-by-key.ts"],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import { KeysExcludeExtendType } from './keys-exclude-extend-type';
2
- export declare type NonNullableKeys<T> = KeysExcludeExtendType<T, null | undefined>;
1
+ import { KeysExcludeByType } from './keys-exclude-by-type';
2
+ export declare type NonNullableKeys<T> = KeysExcludeByType<T, null | undefined>;
@@ -1,2 +1,2 @@
1
- import { KeysExtendType } from './keys-extend-type';
2
- export declare type NullableKeys<T> = KeysExtendType<T, undefined | null>;
1
+ import { KeysByType } from './keys-by-type';
2
+ export declare type NullableKeys<T> = KeysByType<T, undefined | null>;
@@ -0,0 +1,2 @@
1
+ import { KeysByExactType } from './keys-by-exact-type';
2
+ export declare type OmitPropsByExactType<T, Type> = Pick<T, Exclude<keyof T, KeysByExactType<T, Type>>>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=keys-exclude-extend-type.js.map
3
+ //# sourceMappingURL=omit-props-by-exact-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omit-props-by-exact-type.js","sourceRoot":"","sources":["../src/omit-props-by-exact-type.ts"],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import { KeysExtendType } from './keys-extend-type';
2
- export declare type OptionalKeys<T> = Exclude<KeysExtendType<T, undefined>, undefined>;
1
+ import { KeysByType } from './keys-by-type';
2
+ export declare type OptionalKeys<T> = Exclude<KeysByType<T, undefined>, undefined>;
@@ -1,2 +1,2 @@
1
- import { KeysExcludeByType } from './keys-exclude-by-type';
2
- export declare type PickNonNever<T> = Pick<T, KeysExcludeByType<T, never>>;
1
+ import { KeysExcludeByExactType } from './keys-exclude-by-exact-type';
2
+ export declare type PickNonNever<T> = Pick<T, KeysExcludeByExactType<T, never>>;
@@ -1,4 +1,4 @@
1
- import { ReplaceType } from './replace-type';
1
+ import { Replace } from './replace';
2
2
  export declare type ReplacePropsByKey<T, Keys, OldType, NewType> = {
3
- [Key in keyof T]: Key extends Keys ? ReplaceType<T[Key], OldType, NewType> : T[Key];
3
+ [Key in keyof T]: Key extends Keys ? Replace<T[Key], OldType, NewType> : T[Key];
4
4
  };
@@ -1,5 +1,5 @@
1
- import { ReplaceType } from './replace-type';
2
- import { KeysExtendType } from './keys-extend-type';
1
+ import { Replace } from './replace';
2
+ import { KeysByType } from './keys-by-type';
3
3
  export declare type ReplacePropsByType<T, OldType, NewType> = {
4
- [Key in keyof T]: Key extends KeysExtendType<T, OldType> ? ReplaceType<T[Key], OldType, NewType> : T[Key];
4
+ [Key in keyof T]: Key extends KeysByType<T, OldType> ? Replace<T[Key], OldType, NewType> : T[Key];
5
5
  };
@@ -0,0 +1 @@
1
+ export declare type Replace<T, OldType, NewType> = Exclude<T, OldType> | NewType;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=map-props.js.map
3
+ //# sourceMappingURL=replace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace.js","sourceRoot":"","sources":["../src/replace.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- export declare type ReturnTypeOfConstructor<T extends new (...args: any) => any> = T extends new (...args: any) => infer R ? R : any;
1
+ export declare type ReturnTypeOfConstructor<T extends new (...args: any) => any> = T extends new (...args: any) => infer R ? R : never;
@@ -0,0 +1 @@
1
+ export declare type UnpackedArrayLike<T> = T extends ArrayLike<infer U> ? U : never;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=unpacked-array-like.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpacked-array-like.js","sourceRoot":"","sources":["../src/unpacked-array-like.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare type UnpackedArray<T> = T extends Array<infer U> ? U : never;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=keys-extend-type.js.map
3
+ //# sourceMappingURL=unpacked-array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpacked-array.js","sourceRoot":"","sources":["../src/unpacked-array.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare type UnpackedAsyncIterable<T> = T extends AsyncIterable<infer U> ? U : never;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=unpacked-async-iterable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpacked-async-iterable.js","sourceRoot":"","sources":["../src/unpacked-async-iterable.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare type UnpackedIterable<T> = T extends Iterable<infer U> ? U : never;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=unpacked-iterable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpacked-iterable.js","sourceRoot":"","sources":["../src/unpacked-iterable.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare type UnpackedPromiseLike<T> = T extends PromiseLike<infer U> ? U : never;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=unpacked-promise-like.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpacked-promise-like.js","sourceRoot":"","sources":["../src/unpacked-promise-like.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare type UnpackedPromise<T> = T extends Promise<infer U> ? U : never;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=unpacked-promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpacked-promise.js","sourceRoot":"","sources":["../src/unpacked-promise.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hotypes",
3
- "version": "0.4.8",
3
+ "version": "0.5.0",
4
4
  "description": "Higher order types for TypeScript",
5
5
  "keywords": [
6
6
  "higher-order",
@@ -37,13 +37,13 @@
37
37
  }
38
38
  },
39
39
  "devDependencies": {
40
- "@blackglory/pass": "^1.0.1",
41
- "@commitlint/cli": "^17.0.3",
42
- "@commitlint/config-conventional": "^17.0.3",
40
+ "@blackglory/pass": "^1.1.0",
41
+ "@commitlint/cli": "^17.1.2",
42
+ "@commitlint/config-conventional": "^17.1.0",
43
43
  "@types/jest": "^27.4.1",
44
- "@typescript-eslint/eslint-plugin": "^5.34.0",
45
- "@typescript-eslint/parser": "^5.34.0",
46
- "eslint": "^8.22.0",
44
+ "@typescript-eslint/eslint-plugin": "^5.37.0",
45
+ "@typescript-eslint/parser": "^5.37.0",
46
+ "eslint": "^8.23.1",
47
47
  "husky": "^4.3.8",
48
48
  "jest": "^27.5.1",
49
49
  "npm-run-all": "^4.1.5",
@@ -1,2 +0,0 @@
1
- import { KeysExtendType } from './keys-extend-type';
2
- export declare type KeysExcludeExtendType<T, Type> = Exclude<keyof T, KeysExtendType<T, Type>>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"keys-exclude-extend-type.js","sourceRoot":"","sources":["../src/keys-exclude-extend-type.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- export declare type KeysExtendType<T, Type> = {
2
- [Key in keyof T]: T[Key] extends Type ? Key : Type extends T[Key] ? Key : never;
3
- }[keyof T];
@@ -1 +0,0 @@
1
- {"version":3,"file":"keys-extend-type.js","sourceRoot":"","sources":["../src/keys-extend-type.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-props-by-key-to-non-optional.js","sourceRoot":"","sources":["../src/map-props-by-key-to-non-optional.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-props-by-key-to-optional.js","sourceRoot":"","sources":["../src/map-props-by-key-to-optional.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- export declare type MapPropsExtendType<T, OldType, NewType> = {
2
- [Key in keyof T]: T[Key] extends OldType ? Exclude<T[Key], OldType> | NewType : OldType extends T[Key] ? Exclude<T[Key], OldType> | NewType : T[Key];
3
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-props-extend-type.js","sourceRoot":"","sources":["../src/map-props-extend-type.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- export declare type MapProps<T, NewType> = {
2
- [Key in keyof T]: NewType;
3
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-props.js","sourceRoot":"","sources":["../src/map-props.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import { KeysExtendType } from './keys-extend-type';
2
- export declare type OmitPropsExtendType<T, Type> = Pick<T, Exclude<keyof T, KeysExtendType<T, Type>>>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"omit-props-extend-type.js","sourceRoot":"","sources":["../src/omit-props-extend-type.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- export declare type ReplaceType<T, OldType, NewType> = Exclude<T, OldType> | NewType;
@@ -1 +0,0 @@
1
- {"version":3,"file":"replace-type.js","sourceRoot":"","sources":["../src/replace-type.ts"],"names":[],"mappings":""}