type-plus 7.2.1 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/cjs/array/array.some.d.ts +1 -1
- package/cjs/merge.d.ts +55 -0
- package/cjs/merge.d.ts.map +1 -0
- package/cjs/merge.js +18 -0
- package/cjs/merge.js.map +1 -0
- package/cjs/object/AnyRecord.d.ts +2 -1
- package/cjs/object/AnyRecord.d.ts.map +1 -1
- package/cjs/object/index.d.ts +1 -0
- package/cjs/object/index.d.ts.map +1 -1
- package/cjs/object/index.js.map +1 -1
- package/cjs/object/left_join.d.ts +10 -38
- package/cjs/object/left_join.d.ts.map +1 -1
- package/cjs/object/left_join.js +0 -15
- package/cjs/object/left_join.js.map +1 -1
- package/cjs/object/optional_key.d.ts +35 -0
- package/cjs/object/optional_key.d.ts.map +1 -0
- package/cjs/object/optional_key.js +3 -0
- package/cjs/object/optional_key.js.map +1 -0
- package/cjs/testing/test_type.d.ts +36 -8
- package/cjs/testing/test_type.d.ts.map +1 -1
- package/cjs/testing/test_type.js.map +1 -1
- package/esm/array/array.some.d.ts +1 -1
- package/esm/merge.d.ts +55 -0
- package/esm/merge.d.ts.map +1 -0
- package/esm/merge.js +14 -0
- package/esm/merge.js.map +1 -0
- package/esm/object/AnyRecord.d.ts +2 -1
- package/esm/object/AnyRecord.d.ts.map +1 -1
- package/esm/object/index.d.ts +1 -0
- package/esm/object/index.d.ts.map +1 -1
- package/esm/object/index.js.map +1 -1
- package/esm/object/left_join.d.ts +10 -38
- package/esm/object/left_join.d.ts.map +1 -1
- package/esm/object/left_join.js +1 -13
- package/esm/object/left_join.js.map +1 -1
- package/esm/object/optional_key.d.ts +35 -0
- package/esm/object/optional_key.d.ts.map +1 -0
- package/esm/object/optional_key.js +2 -0
- package/esm/object/optional_key.js.map +1 -0
- package/esm/testing/test_type.d.ts +36 -8
- package/esm/testing/test_type.d.ts.map +1 -1
- package/esm/testing/test_type.js.map +1 -1
- package/package.json +1 -1
- package/ts/array/array.some.ts +1 -1
- package/ts/merge.ts +72 -0
- package/ts/object/AnyRecord.ts +3 -1
- package/ts/object/index.ts +1 -1
- package/ts/object/left_join.ts +15 -38
- package/ts/object/optional_key.ts +38 -0
- package/ts/object/readme.md +37 -0
- package/ts/testing/test_type.ts +37 -8
package/README.md
CHANGED
|
@@ -1351,6 +1351,7 @@ Whenever possible, I add attribution to the person who created those **codes** i
|
|
|
1351
1351
|
- [expect-type]: Compile-time tests for types
|
|
1352
1352
|
- [hotscript]: Higher-order TypeScript
|
|
1353
1353
|
- [spec.ts]: write tests for your types!
|
|
1354
|
+
- [ts-calc]: compute with typescript type system, part of [hotscript]
|
|
1354
1355
|
- [ts-essentials]: all essential TypeScript types in one place.
|
|
1355
1356
|
- [ts-expect]: Checks values in TypeScript match expectations.
|
|
1356
1357
|
- [ts-toolbelt]: TypeScript's largest utility library.
|
|
@@ -1374,6 +1375,7 @@ Whenever possible, I add attribution to the person who created those **codes** i
|
|
|
1374
1375
|
[npm_image]: https://img.shields.io/npm/v/type-plus.svg?style=flat
|
|
1375
1376
|
[npm_url]: https://npmjs.org/package/type-plus
|
|
1376
1377
|
[spec.ts]: https://github.com/aleclarson/spec.ts
|
|
1378
|
+
[ts-calc]: https://github.com/ecyrbe/ts-calc
|
|
1377
1379
|
[ts-essentials]: https://github.com/ts-essentials/ts-essentials
|
|
1378
1380
|
[ts-expect]: https://github.com/TypeStrong/ts-expect
|
|
1379
1381
|
[ts-toolbelt]: https://github.com/millsp/ts-toolbelt
|
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
|
package/cjs/merge.js.map
ADDED
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,
|
|
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"}
|
package/cjs/object/index.d.ts
CHANGED
|
@@ -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"}
|
package/cjs/object/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;
|
|
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 {
|
|
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 {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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,
|
|
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"}
|
package/cjs/object/left_join.js
CHANGED
|
@@ -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":"
|
|
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 @@
|
|
|
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
|
|
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
|
-
*
|
|
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 =>
|
|
219
|
-
*
|
|
220
|
-
* //
|
|
221
|
-
*
|
|
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):
|
|
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":";;;
|
|
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"}
|
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
|
package/esm/merge.js.map
ADDED
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,
|
|
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"}
|
package/esm/object/index.d.ts
CHANGED
|
@@ -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"}
|
package/esm/object/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAkBA,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;AAEzB,cAAc,aAAa,CAAA;AAE3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}
|
|
@@ -1,43 +1,15 @@
|
|
|
1
|
-
import type {
|
|
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 {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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,
|
|
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"}
|
package/esm/object/left_join.js
CHANGED
|
@@ -1,14 +1,2 @@
|
|
|
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 leftJoin(a, b) {
|
|
12
|
-
return { ...a, ...b };
|
|
13
|
-
}
|
|
1
|
+
export {};
|
|
14
2
|
//# sourceMappingURL=left_join.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"left_join.js","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"
|
|
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 @@
|
|
|
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
|
|
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
|
-
*
|
|
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 =>
|
|
219
|
-
*
|
|
220
|
-
* //
|
|
221
|
-
*
|
|
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):
|
|
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":"
|
|
1
|
+
{"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"AA4OA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,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"}
|
package/package.json
CHANGED
package/ts/array/array.some.ts
CHANGED
package/ts/merge.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Left join type `A` with type `B`.
|
|
11
|
+
*
|
|
12
|
+
* It handles cases like A or B are `Record`,
|
|
13
|
+
* joining between required and optional props, etc.
|
|
14
|
+
*/
|
|
15
|
+
export type Merge<A, B> = [A, B] extends [NonComposableTypes, unknown] ? B
|
|
16
|
+
: [A, B] extends [unknown, NonComposableTypes] ? A
|
|
17
|
+
: A extends AnyRecord ? B extends AnyRecord
|
|
18
|
+
? IsDisjoint<A, B> extends true
|
|
19
|
+
? A & B
|
|
20
|
+
: ([keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes]
|
|
21
|
+
? (IsLiteral<KA> extends true
|
|
22
|
+
? (IsLiteral<KB> extends true
|
|
23
|
+
? ([OptionalKeys<A>, OptionalKeys<B>] extends [infer PKA extends KeyTypes, infer PKB extends KeyTypes]
|
|
24
|
+
?
|
|
25
|
+
// property is optional when both A[k] and B[k] are optional
|
|
26
|
+
{
|
|
27
|
+
[k in PKA & PKB]?: A[k] | B[k] | undefined
|
|
28
|
+
} &
|
|
29
|
+
{
|
|
30
|
+
[k in Exclude<KA & KB, PKA | PKB>]: Merge.JoinProps<A[k], B[k]>
|
|
31
|
+
} &
|
|
32
|
+
// properties only in A excluding partials is A[k]
|
|
33
|
+
{ [k in Exclude<KA, PKA | KB>]: A[k] } &
|
|
34
|
+
// properties only in B excluding partials is B[k]
|
|
35
|
+
{ [k in Exclude<KB, PKB>]: B[k] } &
|
|
36
|
+
// properties is required in A but optional in B is unionized without undefined
|
|
37
|
+
{ [k in Exclude<KA & PKB, PKA>]: Exclude<A[k] | Partial<B[k]>, undefined> }
|
|
38
|
+
: never)
|
|
39
|
+
: Properties<
|
|
40
|
+
{ [k in Exclude<KA, KA & KB>]: A[k] } &
|
|
41
|
+
{ [k in Exclude<KB, KA & KB>]: B[k] } &
|
|
42
|
+
{ [k in KA & KB]: A[k] | B[k] }
|
|
43
|
+
>)
|
|
44
|
+
: (IsLiteral<KB> extends true
|
|
45
|
+
? { [k in Exclude<KA, KB>]: A[k] } & { [k in keyof B]: B[k] }
|
|
46
|
+
: { [k in Exclude<KA, KA & KB>]: A[k] } & { [k in Exclude<KB, KA & KB>]: B[k] } & {
|
|
47
|
+
[k in KA & KB]: A[k] | B[k]
|
|
48
|
+
}))
|
|
49
|
+
: never)
|
|
50
|
+
: never : never
|
|
51
|
+
|
|
52
|
+
export namespace Merge {
|
|
53
|
+
export type JoinProps<A, B> = A extends NonComposableTypes
|
|
54
|
+
? B
|
|
55
|
+
: (B extends NonComposableTypes
|
|
56
|
+
? A
|
|
57
|
+
: A & B)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Left join `a` with `b`.
|
|
62
|
+
*
|
|
63
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export function merge<A, B>(a: A, b: B): Merge<A, B> {
|
|
71
|
+
return { ...a, ...b } as any
|
|
72
|
+
}
|
package/ts/object/AnyRecord.ts
CHANGED
package/ts/object/index.ts
CHANGED
|
@@ -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'
|
|
@@ -36,4 +37,3 @@ export * from './replaceProperty.js'
|
|
|
36
37
|
export * from './someKey.js'
|
|
37
38
|
export * from './split.js'
|
|
38
39
|
export * from './typeOverrideIncompatible.js'
|
|
39
|
-
|
package/ts/object/left_join.ts
CHANGED
|
@@ -1,42 +1,19 @@
|
|
|
1
|
-
import type {
|
|
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 {
|
|
4
|
+
import type { KeysWithDiffType } from './KeysWithDiffType.js'
|
|
5
|
+
import type { Properties } from './properties.js'
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export type
|
|
13
|
-
? A & B
|
|
14
|
-
: [keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes]
|
|
15
|
-
? IsLiteral<KA> extends true
|
|
16
|
-
? IsLiteral<KB> extends true
|
|
17
|
-
? { [k in Exclude<KA, KB>]: A[k] } & {
|
|
18
|
-
[k in KB]: undefined extends B[k] ? Exclude<A[k] | B[k], undefined> : B[k]
|
|
19
|
-
}
|
|
20
|
-
: { [k in Exclude<KA, KA & KB>]: A[k] } & { [k in Exclude<KB, KA & KB>]: B[k] } & {
|
|
21
|
-
[k in KA & KB]: A[k] | B[k]
|
|
22
|
-
}
|
|
23
|
-
: IsLiteral<KB> extends true
|
|
24
|
-
? { [k in Exclude<KA, KB>]: A[k] } & { [k in keyof B]: B[k] }
|
|
25
|
-
: { [k in Exclude<KA, KA & KB>]: A[k] } & { [k in Exclude<KB, KA & KB>]: B[k] } & {
|
|
26
|
-
[k in KA & KB]: A[k] | B[k]
|
|
27
|
-
}
|
|
28
|
-
: never
|
|
7
|
+
export type ANotB<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true
|
|
8
|
+
? never
|
|
9
|
+
: IsDisjoint<A, B> extends true
|
|
10
|
+
? A
|
|
11
|
+
: { [k in Exclude<keyof A, keyof B> | KeysWithDiffType<A, B>]: A[k] }
|
|
12
|
+
|
|
13
|
+
export type BNotA<A extends AnyRecord, B extends AnyRecord> = ANotB<B, A>
|
|
29
14
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* @example
|
|
36
|
-
* ```ts
|
|
37
|
-
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export function leftJoin<A extends AnyRecord, B extends AnyRecord>(a: A, b: B): LeftJoin<A, B> {
|
|
41
|
-
return { ...a, ...b } as any
|
|
42
|
-
}
|
|
15
|
+
export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true
|
|
16
|
+
? A
|
|
17
|
+
: IsDisjoint<A, B> extends true
|
|
18
|
+
? A & B
|
|
19
|
+
: Properties<{ [k in Exclude<keyof A, keyof B>]: A[k] } & { [k in keyof B]: B[k] }>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
import type { AnyRecord } from './AnyRecord.js'
|
|
3
|
+
import type { KeyTypes } from './KeyTypes.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Validate if the key `K` in `T` is optional.
|
|
7
|
+
*
|
|
8
|
+
* 🎭 *validate*
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* IsOptionalKey({ a: 1 }, 'a') // false
|
|
13
|
+
* IsOptionalKey({ a?: 1 }, 'a') // true
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export type IsOptionalKey<T, K, Then = true, Else = false> = K extends OptionalKeys<T> ? Then : Else
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Gets the optional keys of `T`.
|
|
20
|
+
*
|
|
21
|
+
* 🦴 *utilities*
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* OptionalKeys<{ a: 1 }> // never
|
|
26
|
+
* OptionalKeys<{ a?: 1, b: number }> // 'a'
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export type OptionalKeys<T> = T extends unknown
|
|
30
|
+
? { [k in keyof T]-?: Record<KeyTypes, any> extends Pick<T, k> ? k : never }[keyof T]
|
|
31
|
+
: never
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Parse `T` to keep only the optional properties.
|
|
35
|
+
*/
|
|
36
|
+
export type OptionalProps<T extends AnyRecord> = T extends unknown
|
|
37
|
+
? { [k in OptionalKeys<T>]?: T[k] }
|
|
38
|
+
: never
|
package/ts/object/readme.md
CHANGED
|
@@ -21,6 +21,43 @@ type R = ObjectType<1> // never
|
|
|
21
21
|
- [`NotObjectType<T, Then = T, Else = never>`](object_type.ts#L48): check if `T` is not `object`.
|
|
22
22
|
- [`IsNotObject<T, Then = true, Else = false>`](object_type.ts#L65): is `T` not `object`.
|
|
23
23
|
|
|
24
|
+
## IsOptionalKey
|
|
25
|
+
|
|
26
|
+
> `IsOptionalKey<T, K, Then = true, Else = false>`
|
|
27
|
+
|
|
28
|
+
Validate if the key `K` in `T` is optional.
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import type { IsOptionalKey } from 'type-plus'
|
|
32
|
+
|
|
33
|
+
type R = IsOptionalKey<{ a?: number }, 'a'> // true
|
|
34
|
+
type R = IsOptionalKey<{ a: number }, 'a'> // false
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## OptionalKeys
|
|
38
|
+
|
|
39
|
+
> `OptionalKeys<T>`
|
|
40
|
+
|
|
41
|
+
Gets the optional keys of `T`.
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import type { OptionalKeys } from 'type-plus'
|
|
45
|
+
|
|
46
|
+
type R = OptionalKeys<{ a?: number; b: string }> // 'a'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## OptionalProps
|
|
50
|
+
|
|
51
|
+
> `OptionalProps<T>`
|
|
52
|
+
|
|
53
|
+
Gets the optional properties of `T`.
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import type { OptionalProps } from 'type-plus'
|
|
57
|
+
|
|
58
|
+
type R = OptionalProps<{ a?: number; b: string }> // { a?: number }
|
|
59
|
+
```
|
|
60
|
+
|
|
24
61
|
## References
|
|
25
62
|
|
|
26
63
|
- [Handbook]
|
package/ts/testing/test_type.ts
CHANGED
|
@@ -211,22 +211,27 @@ interface TestType {
|
|
|
211
211
|
/**
|
|
212
212
|
* A quick way to inspect a type.
|
|
213
213
|
*
|
|
214
|
-
* The handler
|
|
214
|
+
* The handler receives a `InspectedType` object.
|
|
215
|
+
* It contains `value` which is typed to `T`,
|
|
216
|
+
* and many other properties to inspect the behavior of `T`.
|
|
215
217
|
*
|
|
216
|
-
*
|
|
218
|
+
* The handler is not being call,
|
|
219
|
+
* it is use to hold the type in value for inspection.
|
|
220
|
+
*
|
|
221
|
+
* 🧪 *testing*
|
|
222
|
+
* 🦴 *utilities*
|
|
217
223
|
*
|
|
218
224
|
* @example
|
|
219
225
|
* ```ts
|
|
220
|
-
* testType.inspect<SomeType>(t =>
|
|
221
|
-
*
|
|
222
|
-
* //
|
|
223
|
-
*
|
|
224
|
-
* ...try out the `r` which is `SomeType` here...
|
|
226
|
+
* testType.inspect<SomeType>(t => {
|
|
227
|
+
* type T = typeof t.value // resolve and inspect the type `T`
|
|
228
|
+
* t.extend_boolean // result of `T extends boolean`
|
|
229
|
+
* })
|
|
225
230
|
* ```
|
|
226
231
|
*
|
|
227
232
|
* After trying out the type, remove the line.
|
|
228
233
|
*/
|
|
229
|
-
inspect<T>(handler: (t: T) => unknown):
|
|
234
|
+
inspect<T>(handler: (t: InspectedType<T>) => unknown): T
|
|
230
235
|
}
|
|
231
236
|
|
|
232
237
|
/**
|
|
@@ -241,3 +246,27 @@ export const testType = new Proxy({} as TestType, {
|
|
|
241
246
|
return (expected: unknown) => expected
|
|
242
247
|
}
|
|
243
248
|
})
|
|
249
|
+
|
|
250
|
+
export type InspectedType<T> = {
|
|
251
|
+
value: T
|
|
252
|
+
extends_any: T extends any ? true : false
|
|
253
|
+
extends_unknown: T extends unknown ? true : false
|
|
254
|
+
extends_void: T extends void ? true : false
|
|
255
|
+
extends_never: T extends never ? true : false
|
|
256
|
+
extends_undefined: T extends undefined ? true : false
|
|
257
|
+
extends_null: T extends null ? true : false
|
|
258
|
+
extends_boolean: T extends boolean ? true : false
|
|
259
|
+
extends_true: T extends true ? true : false
|
|
260
|
+
extends_false: T extends false ? true : false
|
|
261
|
+
extends_number: T extends number ? true : false
|
|
262
|
+
extends_1: T extends 1 ? true : false
|
|
263
|
+
extends_bigint: T extends bigint ? true : false
|
|
264
|
+
extends_1n: T extends 1n ? true : false
|
|
265
|
+
extends_string: T extends string ? true : false
|
|
266
|
+
extends_a: T extends 'a' ? true : false
|
|
267
|
+
extends_symbol: T extends symbol ? true : false
|
|
268
|
+
extends_object: T extends object ? true : false
|
|
269
|
+
extends_function: T extends Function ? true : false
|
|
270
|
+
extends_array_unknown: T extends unknown[] ? true : false
|
|
271
|
+
extends_tuple_empty: T extends [] ? true : false
|
|
272
|
+
}
|