type-fest 4.10.0 → 4.10.2
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/package.json +2 -3
- package/source/merge-deep.d.ts +16 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "type-fest",
|
|
3
|
-
"version": "4.10.
|
|
3
|
+
"version": "4.10.2",
|
|
4
4
|
"description": "A collection of essential TypeScript types",
|
|
5
5
|
"license": "(MIT OR CC0-1.0)",
|
|
6
6
|
"repository": "sindresorhus/type-fest",
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
"node": ">=16"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
|
-
"test": "xo && tsd && tsc &&
|
|
20
|
-
"test:undefined-on-partial-deep": "cd test-d/undefined-on-partial-deep && tsc --project tsconfig.json"
|
|
19
|
+
"test": "xo && tsd && tsc && node script/test/source-files-extension.js"
|
|
21
20
|
},
|
|
22
21
|
"files": [
|
|
23
22
|
"index.d.ts",
|
package/source/merge-deep.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
UnknownArrayOrTuple,
|
|
11
11
|
} from './internal';
|
|
12
12
|
import type {UnknownRecord} from './unknown-record';
|
|
13
|
+
import type {EnforceOptional} from './enforce-optional';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
Deeply simplifies an object excluding iterables and functions. Used internally to improve the UX and accept both interfaces and type aliases as inputs.
|
|
@@ -62,6 +63,9 @@ type MergeDeepRecord<
|
|
|
62
63
|
> = DoMergeDeepRecord<OmitIndexSignature<Destination>, OmitIndexSignature<Source>, Options>
|
|
63
64
|
& Merge<PickIndexSignature<Destination>, PickIndexSignature<Source>>;
|
|
64
65
|
|
|
66
|
+
// Helper to avoid computing ArrayTail twice.
|
|
67
|
+
type PickRestTypeHelper<Tail extends UnknownArrayOrTuple, Type> = Tail extends [] ? Type : PickRestType<Tail>;
|
|
68
|
+
|
|
65
69
|
/**
|
|
66
70
|
Pick the rest type.
|
|
67
71
|
|
|
@@ -75,9 +79,18 @@ type Rest5 = PickRestType<string[]>; // => string[]
|
|
|
75
79
|
```
|
|
76
80
|
*/
|
|
77
81
|
type PickRestType<Type extends UnknownArrayOrTuple> = number extends Type['length']
|
|
78
|
-
? ArrayTail<Type
|
|
82
|
+
? PickRestTypeHelper<ArrayTail<Type>, Type>
|
|
79
83
|
: [];
|
|
80
84
|
|
|
85
|
+
// Helper to avoid computing ArrayTail twice.
|
|
86
|
+
type OmitRestTypeHelper<
|
|
87
|
+
Tail extends UnknownArrayOrTuple,
|
|
88
|
+
Type extends UnknownArrayOrTuple,
|
|
89
|
+
Result extends UnknownArrayOrTuple = [],
|
|
90
|
+
> = Tail extends []
|
|
91
|
+
? Result
|
|
92
|
+
: OmitRestType<Tail, [...Result, FirstArrayElement<Type>]>;
|
|
93
|
+
|
|
81
94
|
/**
|
|
82
95
|
Omit the rest type.
|
|
83
96
|
|
|
@@ -92,7 +105,7 @@ type Tuple6 = OmitRestType<string[]>; // => []
|
|
|
92
105
|
```
|
|
93
106
|
*/
|
|
94
107
|
type OmitRestType<Type extends UnknownArrayOrTuple, Result extends UnknownArrayOrTuple = []> = number extends Type['length']
|
|
95
|
-
?
|
|
108
|
+
? OmitRestTypeHelper<ArrayTail<Type>, Type, Result>
|
|
96
109
|
: Type;
|
|
97
110
|
|
|
98
111
|
// Utility to avoid picking two times the type.
|
|
@@ -289,7 +302,7 @@ type MergeDeepOrReturn<
|
|
|
289
302
|
: DefaultType
|
|
290
303
|
: Destination extends UnknownArrayOrTuple
|
|
291
304
|
? Source extends UnknownArrayOrTuple
|
|
292
|
-
? MergeDeepArrayOrTuple<Destination, Source, Merge<Options, {spreadTopLevelArrays: false}
|
|
305
|
+
? MergeDeepArrayOrTuple<Destination, Source, EnforceOptional<Merge<Options, {spreadTopLevelArrays: false}>>>
|
|
293
306
|
: DefaultType
|
|
294
307
|
: DefaultType>;
|
|
295
308
|
|