merge-anything 5.1.0 → 5.1.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.
package/dist/types/merge.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { PrettyPrint } from './typeUtils/PrettyPrint';
|
|
|
6
6
|
*
|
|
7
7
|
* This TS Utility can be used as standalone as well
|
|
8
8
|
*/
|
|
9
|
-
export declare type Merge<T extends
|
|
9
|
+
export declare type Merge<T extends Record<string | number | symbol, unknown>, Ts extends List<Record<string | number | symbol, unknown>>> = PrettyPrint<Assign<T, Ts>>;
|
|
10
10
|
/**
|
|
11
11
|
* Merge anything recursively.
|
|
12
12
|
* Objects get merged, special objects (classes etc.) are re-assigned "as is".
|
|
@@ -34,8 +34,8 @@ declare type Cast<A1, A2> = A1 extends A2 ? A1 : A2;
|
|
|
34
34
|
* ```
|
|
35
35
|
*/
|
|
36
36
|
declare type Extends<A1, A2> = [A1] extends [never] ? 0 : A1 extends A2 ? 1 : 0;
|
|
37
|
-
declare type __Assign<O extends
|
|
38
|
-
declare type _Assign<O extends
|
|
37
|
+
declare type __Assign<O extends Record<string | number | symbol, unknown>, Os extends List<Record<string | number | symbol, unknown>>, I extends Iteration = IterationOf<0>> = Extends<Pos<I>, Length<Os>> extends 1 ? O : __Assign<MergeDeep<O, Os[Pos<I>]>, Os, Next<I>>;
|
|
38
|
+
declare type _Assign<O extends Record<string | number | symbol, unknown>, Os extends List<Record<string | number | symbol, unknown>>> = __Assign<O, Os> extends infer X ? Cast<X, Record<string | number | symbol, unknown>> : never;
|
|
39
39
|
/**
|
|
40
40
|
* Assign a list of [[Object]] into `O` with [[MergeDeep]]. Merges from right to
|
|
41
41
|
* left, first items get overridden by the next ones (last-in overrides).
|
|
@@ -46,5 +46,5 @@ declare type _Assign<O extends object, Os extends List<object>> = __Assign<O, Os
|
|
|
46
46
|
* ```ts
|
|
47
47
|
* ```
|
|
48
48
|
*/
|
|
49
|
-
export declare type Assign<O extends
|
|
49
|
+
export declare type Assign<O extends Record<string | number | symbol, unknown>, Os extends List<Record<string | number | symbol, unknown>>> = O extends unknown ? (Os extends unknown ? _Assign<O, Os> : never) : never;
|
|
50
50
|
export {};
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Get the keys of `O` that are optional
|
|
3
|
+
* @param O
|
|
4
|
+
* @returns [[Key]]
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* ```
|
|
4
8
|
*/
|
|
5
|
-
declare type
|
|
6
|
-
[K in keyof O]:
|
|
7
|
-
};
|
|
9
|
+
declare type OptionalKeys<O extends object> = O extends unknown ? {
|
|
10
|
+
[K in keyof O]-?: {} extends Pick<O, K> ? K : never;
|
|
11
|
+
}[keyof O] : never;
|
|
8
12
|
/**
|
|
9
|
-
* Get
|
|
10
|
-
* @param O
|
|
11
|
-
* @
|
|
12
|
-
* @returns [[Any]]
|
|
13
|
+
* Get the keys of `O` that are required
|
|
14
|
+
* @param O
|
|
15
|
+
* @returns [[Key]]
|
|
13
16
|
* @example
|
|
14
17
|
* ```ts
|
|
15
|
-
* type User = {
|
|
16
|
-
* info: { name: string; age: number; payment: {} }
|
|
17
|
-
* id: number
|
|
18
|
-
* }
|
|
19
|
-
*
|
|
20
|
-
* type test0 = At<User, 'id'> // number
|
|
21
18
|
* ```
|
|
22
19
|
*/
|
|
23
|
-
declare type
|
|
20
|
+
declare type RequiredKeys<O extends object> = O extends unknown ? {
|
|
21
|
+
[K in keyof O]-?: {} extends Pick<O, K> ? never : K;
|
|
22
|
+
}[keyof O] : never;
|
|
24
23
|
declare type MergeObjectDeeply<O extends Record<string | number | symbol, unknown>, O1 extends Record<string | number | symbol, unknown>> = {
|
|
25
|
-
[K in keyof (
|
|
24
|
+
[K in keyof (O & O1)]: K extends RequiredKeys<O1> ? MergeObjectsOrReturnFallback<O[K], O1[K], O1[K]> : K extends OptionalKeys<O1> ? K extends OptionalKeys<O> ? MergeObjectsOrReturnFallback<Exclude<O[K], undefined>, Exclude<O1[K], undefined>, Exclude<O[K], undefined> | Exclude<O1[K], undefined>> : K extends RequiredKeys<O> ? Exclude<O1[K], undefined> extends O[K] ? O[K] : MergeObjectsOrReturnFallback<O[K], Exclude<O1[K], undefined>, O[K] | Exclude<O1[K], undefined>> : O1[K] : O[K];
|
|
26
25
|
};
|
|
27
|
-
declare type
|
|
26
|
+
declare type MergeObjectsOrReturnFallback<O, O1, Fallback> = O extends Record<string | number | symbol, unknown> ? O1 extends Record<string | number | symbol, unknown> ? MergeObjectDeeply<O, O1> : Fallback : Fallback;
|
|
28
27
|
/**
|
|
29
28
|
* Accurately merge the fields of `O` with the ones of `O1`. It is
|
|
30
29
|
* equivalent to the spread operator in JavaScript. [[Union]]s and [[Optional]]
|
|
@@ -36,32 +35,23 @@ declare type MergeObjectOrReturnValue<OK, O1K> = [O1K] extends [never] ? OK : OK
|
|
|
36
35
|
* @returns [[Object]]
|
|
37
36
|
* @example
|
|
38
37
|
* ```ts
|
|
39
|
-
*
|
|
40
|
-
* name?: string
|
|
41
|
-
* age?: number
|
|
42
|
-
* zip?: string
|
|
43
|
-
* pay: { cvv?: number }
|
|
44
|
-
* }
|
|
38
|
+
* import { PrettyPrint } from './PrettyPrint'
|
|
45
39
|
*
|
|
46
|
-
* type
|
|
47
|
-
*
|
|
48
|
-
* zip?: number
|
|
49
|
-
* pay: { cvv : number; ccn?: string }
|
|
50
|
-
* city: string
|
|
51
|
-
* }
|
|
40
|
+
* type A1 = { a: number; b?: number; d?: number; e?: number; x: string; y?: number; z: string; } // prettier-ignore
|
|
41
|
+
* type A2 = { a?: number; c?: number; d?: number; e: number; x: number | undefined; y?: string; z?: number; } // prettier-ignore
|
|
52
42
|
*
|
|
53
|
-
* type
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
43
|
+
* type Result = PrettyPrint<MergeDeep<A1, A2>>
|
|
44
|
+
* {
|
|
45
|
+
* a: number;
|
|
46
|
+
* b?: number | undefined;
|
|
47
|
+
* c?: number | undefined;
|
|
48
|
+
* d?: number | undefined;
|
|
49
|
+
* e: number;
|
|
50
|
+
* x: number | undefined;
|
|
51
|
+
* y?: string | number | undefined;
|
|
52
|
+
* z: string | number;
|
|
53
|
+
* }
|
|
64
54
|
* ```
|
|
65
55
|
*/
|
|
66
|
-
export declare type MergeDeep<O extends
|
|
56
|
+
export declare type MergeDeep<O extends Record<string | number | symbol, unknown>, O1 extends Record<string | number | symbol, unknown>> = O extends unknown ? (O1 extends unknown ? MergeObjectDeeply<O, O1> : never) : never;
|
|
67
57
|
export {};
|