type-plus 7.2.1 → 7.3.1

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 (59) hide show
  1. package/README.md +3 -0
  2. package/cjs/array/array.some.d.ts +1 -1
  3. package/cjs/merge.d.ts +55 -0
  4. package/cjs/merge.d.ts.map +1 -0
  5. package/cjs/merge.js +18 -0
  6. package/cjs/merge.js.map +1 -0
  7. package/cjs/mix_types/any_or_never_type.d.ts +18 -10
  8. package/cjs/mix_types/any_or_never_type.d.ts.map +1 -1
  9. package/cjs/object/AnyRecord.d.ts +2 -1
  10. package/cjs/object/AnyRecord.d.ts.map +1 -1
  11. package/cjs/object/index.d.ts +1 -0
  12. package/cjs/object/index.d.ts.map +1 -1
  13. package/cjs/object/index.js.map +1 -1
  14. package/cjs/object/left_join.d.ts +10 -38
  15. package/cjs/object/left_join.d.ts.map +1 -1
  16. package/cjs/object/left_join.js +0 -15
  17. package/cjs/object/left_join.js.map +1 -1
  18. package/cjs/object/optional_key.d.ts +35 -0
  19. package/cjs/object/optional_key.d.ts.map +1 -0
  20. package/cjs/object/optional_key.js +3 -0
  21. package/cjs/object/optional_key.js.map +1 -0
  22. package/cjs/testing/test_type.d.ts +36 -8
  23. package/cjs/testing/test_type.d.ts.map +1 -1
  24. package/cjs/testing/test_type.js.map +1 -1
  25. package/esm/array/array.some.d.ts +1 -1
  26. package/esm/merge.d.ts +55 -0
  27. package/esm/merge.d.ts.map +1 -0
  28. package/esm/merge.js +14 -0
  29. package/esm/merge.js.map +1 -0
  30. package/esm/mix_types/any_or_never_type.d.ts +18 -10
  31. package/esm/mix_types/any_or_never_type.d.ts.map +1 -1
  32. package/esm/object/AnyRecord.d.ts +2 -1
  33. package/esm/object/AnyRecord.d.ts.map +1 -1
  34. package/esm/object/index.d.ts +1 -0
  35. package/esm/object/index.d.ts.map +1 -1
  36. package/esm/object/index.js.map +1 -1
  37. package/esm/object/left_join.d.ts +10 -38
  38. package/esm/object/left_join.d.ts.map +1 -1
  39. package/esm/object/left_join.js +1 -13
  40. package/esm/object/left_join.js.map +1 -1
  41. package/esm/object/optional_key.d.ts +35 -0
  42. package/esm/object/optional_key.d.ts.map +1 -0
  43. package/esm/object/optional_key.js +2 -0
  44. package/esm/object/optional_key.js.map +1 -0
  45. package/esm/testing/test_type.d.ts +36 -8
  46. package/esm/testing/test_type.d.ts.map +1 -1
  47. package/esm/testing/test_type.js.map +1 -1
  48. package/package.json +4 -3
  49. package/ts/any/readme.md +20 -3
  50. package/ts/array/array.some.ts +1 -1
  51. package/ts/merge.ts +72 -0
  52. package/ts/mix_types/any_or_never_type.ts +18 -10
  53. package/ts/mix_types/readme.md +34 -0
  54. package/ts/object/AnyRecord.ts +3 -1
  55. package/ts/object/index.ts +1 -1
  56. package/ts/object/left_join.ts +15 -38
  57. package/ts/object/optional_key.ts +38 -0
  58. package/ts/object/readme.md +37 -0
  59. package/ts/testing/test_type.ts +37 -8
package/README.md CHANGED
@@ -325,6 +325,7 @@ You can learn more in their respective sections:
325
325
  - [undefined](./ts/undefined/readme.md)
326
326
  - [unknown](./ts/unknown/readme.md)
327
327
  - [void](./ts/void/readme.md)
328
+ - [mix types](./ts/mix-types/readme.md)
328
329
 
329
330
  ### any
330
331
 
@@ -1351,6 +1352,7 @@ Whenever possible, I add attribution to the person who created those **codes** i
1351
1352
  - [expect-type]: Compile-time tests for types
1352
1353
  - [hotscript]: Higher-order TypeScript
1353
1354
  - [spec.ts]: write tests for your types!
1355
+ - [ts-calc]: compute with typescript type system, part of [hotscript]
1354
1356
  - [ts-essentials]: all essential TypeScript types in one place.
1355
1357
  - [ts-expect]: Checks values in TypeScript match expectations.
1356
1358
  - [ts-toolbelt]: TypeScript's largest utility library.
@@ -1374,6 +1376,7 @@ Whenever possible, I add attribution to the person who created those **codes** i
1374
1376
  [npm_image]: https://img.shields.io/npm/v/type-plus.svg?style=flat
1375
1377
  [npm_url]: https://npmjs.org/package/type-plus
1376
1378
  [spec.ts]: https://github.com/aleclarson/spec.ts
1379
+ [ts-calc]: https://github.com/ecyrbe/ts-calc
1377
1380
  [ts-essentials]: https://github.com/ts-essentials/ts-essentials
1378
1381
  [ts-expect]: https://github.com/TypeStrong/ts-expect
1379
1382
  [ts-toolbelt]: https://github.com/millsp/ts-toolbelt
@@ -10,7 +10,7 @@ import type { UnionOfValues } from './union_of_values.js';
10
10
  *
11
11
  * You can also change it to `strict` mode.
12
12
  *
13
- * 🔧 *utilities*
13
+ * 🦴 *utilities*
14
14
  *
15
15
  * @example
16
16
  * ```ts
package/cjs/merge.d.ts ADDED
@@ -0,0 +1,55 @@
1
+ import type { NonComposableTypes } from './composable_types.js';
2
+ import type { AnyRecord } from './object/AnyRecord.js';
3
+ import type { IsDisjoint } from './object/IsDisjoint.js';
4
+ import type { KeyTypes } from './object/KeyTypes.js';
5
+ import type { OptionalKeys } from './object/OptionalKeys.js';
6
+ import type { Properties } from './object/properties.js';
7
+ import type { IsLiteral } from './predicates/literal.js';
8
+ /**
9
+ * Left join type `A` with type `B`.
10
+ *
11
+ * It handles cases like A or B are `Record`,
12
+ * joining between required and optional props, etc.
13
+ */
14
+ export type Merge<A, B> = [A, B] extends [NonComposableTypes, unknown] ? B : [A, B] extends [unknown, NonComposableTypes] ? A : A extends AnyRecord ? B extends AnyRecord ? IsDisjoint<A, B> extends true ? A & B : ([keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes] ? (IsLiteral<KA> extends true ? (IsLiteral<KB> extends true ? ([OptionalKeys<A>, OptionalKeys<B>] extends [infer PKA extends KeyTypes, infer PKB extends KeyTypes] ? {
15
+ [k in PKA & PKB]?: A[k] | B[k] | undefined;
16
+ } & {
17
+ [k in Exclude<KA & KB, PKA | PKB>]: Merge.JoinProps<A[k], B[k]>;
18
+ } & {
19
+ [k in Exclude<KA, PKA | KB>]: A[k];
20
+ } & {
21
+ [k in Exclude<KB, PKB>]: B[k];
22
+ } & {
23
+ [k in Exclude<KA & PKB, PKA>]: Exclude<A[k] | Partial<B[k]>, undefined>;
24
+ } : never) : Properties<{
25
+ [k in Exclude<KA, KA & KB>]: A[k];
26
+ } & {
27
+ [k in Exclude<KB, KA & KB>]: B[k];
28
+ } & {
29
+ [k in KA & KB]: A[k] | B[k];
30
+ }>) : (IsLiteral<KB> extends true ? {
31
+ [k in Exclude<KA, KB>]: A[k];
32
+ } & {
33
+ [k in keyof B]: B[k];
34
+ } : {
35
+ [k in Exclude<KA, KA & KB>]: A[k];
36
+ } & {
37
+ [k in Exclude<KB, KA & KB>]: B[k];
38
+ } & {
39
+ [k in KA & KB]: A[k] | B[k];
40
+ })) : never) : never : never;
41
+ export declare namespace Merge {
42
+ type JoinProps<A, B> = A extends NonComposableTypes ? B : (B extends NonComposableTypes ? A : A & B);
43
+ }
44
+ /**
45
+ * Left join `a` with `b`.
46
+ *
47
+ * This returns the proper type of `{ ...a, ...b }`
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
52
+ * ```
53
+ */
54
+ export declare function merge<A, B>(a: A, b: B): Merge<A, B>;
55
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":"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"}
package/cjs/merge.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.merge = void 0;
4
+ /**
5
+ * Left join `a` with `b`.
6
+ *
7
+ * This returns the proper type of `{ ...a, ...b }`
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
12
+ * ```
13
+ */
14
+ function merge(a, b) {
15
+ return { ...a, ...b };
16
+ }
17
+ exports.merge = merge;
18
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":";;;AA2DA;;;;;;;;;EASE;AACF,SAAgB,KAAK,CAAO,CAAI,EAAE,CAAI;IACrC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAS,CAAA;AAC7B,CAAC;AAFD,sBAEC"}
@@ -1,20 +1,28 @@
1
- import type { IsNever } from '../never/never_type.js';
2
- import type { IsAny } from '../any/any_type.js';
1
+ import type { AnyType } from '../any/any_type.js';
2
+ import type { NeverType } from '../never/never_type.js';
3
3
  /**
4
- * 🐾 Parse `T` to ensure it is either exactly `any` or exactly `never`.
4
+ * Parse `T` to ensure it is either exactly `any` or exactly `never`.
5
+ *
6
+ * 🐾 *parse*
7
+ * 🩳 *shortcut*
5
8
  *
6
9
  * @example
7
10
  * ```ts
8
- * type R = AnyType<any> // any
11
+ * type R = AnyOrNeverType<any> // any
12
+ * type R = AnyOrNeverType<never> // never
13
+ * type R = AnyOrNeverType<never, 1, 2> // 1
9
14
  *
10
- * type R = AnyType<never> // never
11
- * type R = AnyType<unknown> // never
12
- * type R = AnyType<string | boolean> // never
15
+ * type R = AnyOrNeverType<unknown> // never
16
+ * type R = AnyOrNeverType<unknown, 1, 2> // 2
17
+ * type R = AnyOrNeverType<string | boolean> // never
13
18
  * ```
14
19
  */
15
- export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T, Then, Else>>;
20
+ export type AnyOrNeverType<T, Then = T, Else = never> = NeverType<T, Then, AnyType<T, Then, Else>>;
16
21
  /**
17
- * 🎭 Validate if `T` is either exactly `any` or exactly `never`.
22
+ * Validate if `T` is either exactly `any` or exactly `never`.
23
+ *
24
+ * 🎭 *validate*
25
+ * 🩳 *shortcut*
18
26
  *
19
27
  * @example
20
28
  * ```ts
@@ -25,5 +33,5 @@ export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T
25
33
  * type R = IsAnyOrNever<unknown> // false
26
34
  * ```
27
35
  */
28
- export type IsAnyOrNever<T, Then = true, Else = false> = IsNever<T, Then, IsAny<T, Then, Else>>;
36
+ export type IsAnyOrNever<T, Then = true, Else = false> = NeverType<T, Then, AnyType<T, Then, Else>>;
29
37
  //# sourceMappingURL=any_or_never_type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAE9F;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAElG;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
@@ -1,2 +1,3 @@
1
- export type AnyRecord = Record<keyof any, any>;
1
+ import type { KeyTypes } from './KeyTypes.js';
2
+ export type AnyRecord = Record<KeyTypes, any>;
2
3
  //# sourceMappingURL=AnyRecord.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA"}
@@ -9,6 +9,7 @@ export type { KeysWithDiffType } from './KeysWithDiffType.js';
9
9
  export type { KnownKeys } from './KnownKeys.js';
10
10
  export type { OptionalKeys } from './OptionalKeys.js';
11
11
  export type { Partial, PartialExcept, PartialOmit, PartialPick } from './Partial.js';
12
+ export type * from './optional_key.js';
12
13
  export type { RecursiveIntersect } from './RecursiveIntersect.js';
13
14
  export type { RecursiveRequired } from './RecursiveRequired.js';
14
15
  export type { RequiredExcept, RequiredPick } from './Required.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACpF,mBAAmB,mBAAmB,CAAA;AACtC,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAiBA,gDAA6B;AAC7B,8CAA2B;AAC3B,iDAA8B;AAC9B,+CAA4B;AAC5B,kDAA+B;AAC/B,gDAA6B;AAC7B,8CAA2B;AAC3B,mDAAgC;AAChC,iDAA8B;AAC9B,8CAA2B;AAC3B,qDAAkC;AAClC,4CAAyB;AACzB,4CAAyB;AAEzB,8CAA2B;AAE3B,iDAA8B;AAC9B,uDAAoC;AACpC,+CAA4B;AAC5B,6CAA0B;AAC1B,gEAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkBA,gDAA6B;AAC7B,8CAA2B;AAC3B,iDAA8B;AAC9B,+CAA4B;AAC5B,kDAA+B;AAC/B,gDAA6B;AAC7B,8CAA2B;AAC3B,mDAAgC;AAChC,iDAA8B;AAC9B,8CAA2B;AAC3B,qDAAkC;AAClC,4CAAyB;AACzB,4CAAyB;AAEzB,8CAA2B;AAE3B,iDAA8B;AAC9B,uDAAoC;AACpC,+CAA4B;AAC5B,6CAA0B;AAC1B,gEAA6C"}
@@ -1,43 +1,15 @@
1
- import type { IsLiteral } from '../predicates/index.js';
1
+ import type { IsEqual } from '../equal/equal.js';
2
2
  import type { AnyRecord } from './AnyRecord.js';
3
3
  import type { IsDisjoint } from './IsDisjoint.js';
4
- import type { KeyTypes } from './KeyTypes.js';
5
- /**
6
- * Left join type `A` with type `B`.
7
- *
8
- * It handles cases like A or B are `Record`,
9
- * joining between required and optional props, etc.
10
- */
11
- export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsDisjoint<A, B> extends true ? A & B : [keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes] ? IsLiteral<KA> extends true ? IsLiteral<KB> extends true ? {
12
- [k in Exclude<KA, KB>]: A[k];
13
- } & {
14
- [k in KB]: undefined extends B[k] ? Exclude<A[k] | B[k], undefined> : B[k];
15
- } : {
16
- [k in Exclude<KA, KA & KB>]: A[k];
17
- } & {
18
- [k in Exclude<KB, KA & KB>]: B[k];
19
- } & {
20
- [k in KA & KB]: A[k] | B[k];
21
- } : IsLiteral<KB> extends true ? {
22
- [k in Exclude<KA, KB>]: A[k];
4
+ import type { KeysWithDiffType } from './KeysWithDiffType.js';
5
+ import type { Properties } from './properties.js';
6
+ export type ANotB<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true ? never : IsDisjoint<A, B> extends true ? A : {
7
+ [k in Exclude<keyof A, keyof B> | KeysWithDiffType<A, B>]: A[k];
8
+ };
9
+ export type BNotA<A extends AnyRecord, B extends AnyRecord> = ANotB<B, A>;
10
+ export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true ? A : IsDisjoint<A, B> extends true ? A & B : Properties<{
11
+ [k in Exclude<keyof A, keyof B>]: A[k];
23
12
  } & {
24
13
  [k in keyof B]: B[k];
25
- } : {
26
- [k in Exclude<KA, KA & KB>]: A[k];
27
- } & {
28
- [k in Exclude<KB, KA & KB>]: B[k];
29
- } & {
30
- [k in KA & KB]: A[k] | B[k];
31
- } : never;
32
- /**
33
- * Left join `a` with `b`.
34
- *
35
- * This returns the proper type of `{ ...a, ...b }`
36
- *
37
- * @example
38
- * ```ts
39
- * leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
40
- * ```
41
- */
42
- export declare function leftJoin<A extends AnyRecord, B extends AnyRecord>(a: A, b: B): LeftJoin<A, B>;
14
+ }>;
43
15
  //# sourceMappingURL=left_join.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"left_join.d.ts","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC3F,CAAC,GAAG,CAAC,GACL,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,SAAS,QAAQ,CAAC,GACjF,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GACzB,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GACzB;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAClC,CAAC,IAAI,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACzE,GACD;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAC/E,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACF,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GAC1B;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3D;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAC/E,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACF,KAAK,CAAA;AAER;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAE7F"}
1
+ {"version":3,"file":"left_join.d.ts","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GACrF,KAAK,GACL,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC7B,CAAC,GACD;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAEtE,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEzE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GACxF,CAAC,GACD,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC7B,CAAC,GAAG,CAAC,GACL,UAAU,CAAC;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAA"}
@@ -1,18 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.leftJoin = void 0;
4
- /**
5
- * Left join `a` with `b`.
6
- *
7
- * This returns the proper type of `{ ...a, ...b }`
8
- *
9
- * @example
10
- * ```ts
11
- * leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
12
- * ```
13
- */
14
- function leftJoin(a, b) {
15
- return { ...a, ...b };
16
- }
17
- exports.leftJoin = leftJoin;
18
3
  //# sourceMappingURL=left_join.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"left_join.js","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":";;;AA6BA;;;;;;;;;GASG;AACH,SAAgB,QAAQ,CAA2C,CAAI,EAAE,CAAI;IAC5E,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAS,CAAA;AAC7B,CAAC;AAFD,4BAEC"}
1
+ {"version":3,"file":"left_join.js","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import type { AnyRecord } from './AnyRecord.js';
2
+ import type { KeyTypes } from './KeyTypes.js';
3
+ /**
4
+ * Validate if the key `K` in `T` is optional.
5
+ *
6
+ * 🎭 *validate*
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * IsOptionalKey({ a: 1 }, 'a') // false
11
+ * IsOptionalKey({ a?: 1 }, 'a') // true
12
+ * ```
13
+ */
14
+ export type IsOptionalKey<T, K, Then = true, Else = false> = K extends OptionalKeys<T> ? Then : Else;
15
+ /**
16
+ * Gets the optional keys of `T`.
17
+ *
18
+ * 🦴 *utilities*
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * OptionalKeys<{ a: 1 }> // never
23
+ * OptionalKeys<{ a?: 1, b: number }> // 'a'
24
+ * ```
25
+ */
26
+ export type OptionalKeys<T> = T extends unknown ? {
27
+ [k in keyof T]-?: Record<KeyTypes, any> extends Pick<T, k> ? k : never;
28
+ }[keyof T] : never;
29
+ /**
30
+ * Parse `T` to keep only the optional properties.
31
+ */
32
+ export type OptionalProps<T extends AnyRecord> = T extends unknown ? {
33
+ [k in OptionalKeys<T>]?: T[k];
34
+ } : never;
35
+ //# sourceMappingURL=optional_key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional_key.d.ts","sourceRoot":"","sources":["../../ts/object/optional_key.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAEpG;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,GAC5C;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,MAAM,CAAC,CAAC,GACnF,KAAK,CAAA;AAER;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,OAAO,GAC/D;KAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAAE,GACjC,KAAK,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=optional_key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional_key.js","sourceRoot":"","sources":["../../ts/object/optional_key.ts"],"names":[],"mappings":""}
@@ -209,22 +209,27 @@ interface TestType {
209
209
  /**
210
210
  * A quick way to inspect a type.
211
211
  *
212
- * The handler is not being call.
212
+ * The handler receives a `InspectedType` object.
213
+ * It contains `value` which is typed to `T`,
214
+ * and many other properties to inspect the behavior of `T`.
213
215
  *
214
- * It just make it easy to inspect a specific type.
216
+ * The handler is not being call,
217
+ * it is use to hold the type in value for inspection.
218
+ *
219
+ * 🧪 *testing*
220
+ * 🦴 *utilities*
215
221
  *
216
222
  * @example
217
223
  * ```ts
218
- * testType.inspect<SomeType>(t => ...try out the `t` which is `SomeType` here...)
219
- *
220
- * // instead of
221
- * const r: SomeType = {} as any
222
- * ...try out the `r` which is `SomeType` here...
224
+ * testType.inspect<SomeType>(t => {
225
+ * type T = typeof t.value // resolve and inspect the type `T`
226
+ * t.extend_boolean // result of `T extends boolean`
227
+ * })
223
228
  * ```
224
229
  *
225
230
  * After trying out the type, remove the line.
226
231
  */
227
- inspect<T>(handler: (t: T) => unknown): (t: T) => unknown;
232
+ inspect<T>(handler: (t: InspectedType<T>) => unknown): T;
228
233
  }
229
234
  /**
230
235
  * Test utilities for types.
@@ -234,5 +239,28 @@ interface TestType {
234
239
  * so that the type can be further inspected.
235
240
  */
236
241
  export declare const testType: TestType;
242
+ export type InspectedType<T> = {
243
+ value: T;
244
+ extends_any: T extends any ? true : false;
245
+ extends_unknown: T extends unknown ? true : false;
246
+ extends_void: T extends void ? true : false;
247
+ extends_never: T extends never ? true : false;
248
+ extends_undefined: T extends undefined ? true : false;
249
+ extends_null: T extends null ? true : false;
250
+ extends_boolean: T extends boolean ? true : false;
251
+ extends_true: T extends true ? true : false;
252
+ extends_false: T extends false ? true : false;
253
+ extends_number: T extends number ? true : false;
254
+ extends_1: T extends 1 ? true : false;
255
+ extends_bigint: T extends bigint ? true : false;
256
+ extends_1n: T extends 1n ? true : false;
257
+ extends_string: T extends string ? true : false;
258
+ extends_a: T extends 'a' ? true : false;
259
+ extends_symbol: T extends symbol ? true : false;
260
+ extends_object: T extends object ? true : false;
261
+ extends_function: T extends Function ? true : false;
262
+ extends_array_unknown: T extends unknown[] ? true : false;
263
+ extends_tuple_empty: T extends [] ? true : false;
264
+ };
237
265
  export {};
238
266
  //# sourceMappingURL=test_type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":";;;AAuOA;;;;;;GAMG;AACU,QAAA,QAAQ,GAAG,IAAI,KAAK,CAAC,EAAc,EAAE;IACjD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS;QAC5B,OAAO,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvC,CAAC;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":";;;AA4OA;;;;;;GAMG;AACU,QAAA,QAAQ,GAAG,IAAI,KAAK,CAAC,EAAc,EAAE;IACjD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS;QAC5B,OAAO,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvC,CAAC;CACD,CAAC,CAAA"}
@@ -10,7 +10,7 @@ import type { UnionOfValues } from './union_of_values.js';
10
10
  *
11
11
  * You can also change it to `strict` mode.
12
12
  *
13
- * 🔧 *utilities*
13
+ * 🦴 *utilities*
14
14
  *
15
15
  * @example
16
16
  * ```ts
package/esm/merge.d.ts ADDED
@@ -0,0 +1,55 @@
1
+ import type { NonComposableTypes } from './composable_types.js';
2
+ import type { AnyRecord } from './object/AnyRecord.js';
3
+ import type { IsDisjoint } from './object/IsDisjoint.js';
4
+ import type { KeyTypes } from './object/KeyTypes.js';
5
+ import type { OptionalKeys } from './object/OptionalKeys.js';
6
+ import type { Properties } from './object/properties.js';
7
+ import type { IsLiteral } from './predicates/literal.js';
8
+ /**
9
+ * Left join type `A` with type `B`.
10
+ *
11
+ * It handles cases like A or B are `Record`,
12
+ * joining between required and optional props, etc.
13
+ */
14
+ export type Merge<A, B> = [A, B] extends [NonComposableTypes, unknown] ? B : [A, B] extends [unknown, NonComposableTypes] ? A : A extends AnyRecord ? B extends AnyRecord ? IsDisjoint<A, B> extends true ? A & B : ([keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes] ? (IsLiteral<KA> extends true ? (IsLiteral<KB> extends true ? ([OptionalKeys<A>, OptionalKeys<B>] extends [infer PKA extends KeyTypes, infer PKB extends KeyTypes] ? {
15
+ [k in PKA & PKB]?: A[k] | B[k] | undefined;
16
+ } & {
17
+ [k in Exclude<KA & KB, PKA | PKB>]: Merge.JoinProps<A[k], B[k]>;
18
+ } & {
19
+ [k in Exclude<KA, PKA | KB>]: A[k];
20
+ } & {
21
+ [k in Exclude<KB, PKB>]: B[k];
22
+ } & {
23
+ [k in Exclude<KA & PKB, PKA>]: Exclude<A[k] | Partial<B[k]>, undefined>;
24
+ } : never) : Properties<{
25
+ [k in Exclude<KA, KA & KB>]: A[k];
26
+ } & {
27
+ [k in Exclude<KB, KA & KB>]: B[k];
28
+ } & {
29
+ [k in KA & KB]: A[k] | B[k];
30
+ }>) : (IsLiteral<KB> extends true ? {
31
+ [k in Exclude<KA, KB>]: A[k];
32
+ } & {
33
+ [k in keyof B]: B[k];
34
+ } : {
35
+ [k in Exclude<KA, KA & KB>]: A[k];
36
+ } & {
37
+ [k in Exclude<KB, KA & KB>]: B[k];
38
+ } & {
39
+ [k in KA & KB]: A[k] | B[k];
40
+ })) : never) : never : never;
41
+ export declare namespace Merge {
42
+ type JoinProps<A, B> = A extends NonComposableTypes ? B : (B extends NonComposableTypes ? A : A & B);
43
+ }
44
+ /**
45
+ * Left join `a` with `b`.
46
+ *
47
+ * This returns the proper type of `{ ...a, ...b }`
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
52
+ * ```
53
+ */
54
+ export declare function merge<A, B>(a: A, b: B): Merge<A, B>;
55
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":"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"}
package/esm/merge.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Left join `a` with `b`.
3
+ *
4
+ * This returns the proper type of `{ ...a, ...b }`
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
9
+ * ```
10
+ */
11
+ export function merge(a, b) {
12
+ return { ...a, ...b };
13
+ }
14
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":"AA2DA;;;;;;;;;EASE;AACF,MAAM,UAAU,KAAK,CAAO,CAAI,EAAE,CAAI;IACrC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAS,CAAA;AAC7B,CAAC"}
@@ -1,20 +1,28 @@
1
- import type { IsNever } from '../never/never_type.js';
2
- import type { IsAny } from '../any/any_type.js';
1
+ import type { AnyType } from '../any/any_type.js';
2
+ import type { NeverType } from '../never/never_type.js';
3
3
  /**
4
- * 🐾 Parse `T` to ensure it is either exactly `any` or exactly `never`.
4
+ * Parse `T` to ensure it is either exactly `any` or exactly `never`.
5
+ *
6
+ * 🐾 *parse*
7
+ * 🩳 *shortcut*
5
8
  *
6
9
  * @example
7
10
  * ```ts
8
- * type R = AnyType<any> // any
11
+ * type R = AnyOrNeverType<any> // any
12
+ * type R = AnyOrNeverType<never> // never
13
+ * type R = AnyOrNeverType<never, 1, 2> // 1
9
14
  *
10
- * type R = AnyType<never> // never
11
- * type R = AnyType<unknown> // never
12
- * type R = AnyType<string | boolean> // never
15
+ * type R = AnyOrNeverType<unknown> // never
16
+ * type R = AnyOrNeverType<unknown, 1, 2> // 2
17
+ * type R = AnyOrNeverType<string | boolean> // never
13
18
  * ```
14
19
  */
15
- export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T, Then, Else>>;
20
+ export type AnyOrNeverType<T, Then = T, Else = never> = NeverType<T, Then, AnyType<T, Then, Else>>;
16
21
  /**
17
- * 🎭 Validate if `T` is either exactly `any` or exactly `never`.
22
+ * Validate if `T` is either exactly `any` or exactly `never`.
23
+ *
24
+ * 🎭 *validate*
25
+ * 🩳 *shortcut*
18
26
  *
19
27
  * @example
20
28
  * ```ts
@@ -25,5 +33,5 @@ export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T
25
33
  * type R = IsAnyOrNever<unknown> // false
26
34
  * ```
27
35
  */
28
- export type IsAnyOrNever<T, Then = true, Else = false> = IsNever<T, Then, IsAny<T, Then, Else>>;
36
+ export type IsAnyOrNever<T, Then = true, Else = false> = NeverType<T, Then, AnyType<T, Then, Else>>;
29
37
  //# sourceMappingURL=any_or_never_type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAE9F;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAElG;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
@@ -1,2 +1,3 @@
1
- export type AnyRecord = Record<keyof any, any>;
1
+ import type { KeyTypes } from './KeyTypes.js';
2
+ export type AnyRecord = Record<KeyTypes, any>;
2
3
  //# sourceMappingURL=AnyRecord.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA"}
@@ -9,6 +9,7 @@ export type { KeysWithDiffType } from './KeysWithDiffType.js';
9
9
  export type { KnownKeys } from './KnownKeys.js';
10
10
  export type { OptionalKeys } from './OptionalKeys.js';
11
11
  export type { Partial, PartialExcept, PartialOmit, PartialPick } from './Partial.js';
12
+ export type * from './optional_key.js';
12
13
  export type { RecursiveIntersect } from './RecursiveIntersect.js';
13
14
  export type { RecursiveRequired } from './RecursiveRequired.js';
14
15
  export type { RequiredExcept, RequiredPick } from './Required.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACpF,mBAAmB,mBAAmB,CAAA;AACtC,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}