@@ -11,9 +11,9 @@ type LastSource<T extends any[], K extends PropertyKey> = T extends [
1111 : LastSource < R , K >
1212 : never
1313
14- type ExtractValue < T extends MergeRecord [ ] , K extends PropertyKey > = T extends [
15- infer F extends MergeRecord ,
16- ...infer R extends MergeRecord [ ] ,
14+ type ExtractValue < T extends MergeSource [ ] , K extends PropertyKey > = T extends [
15+ infer F extends MergeSource ,
16+ ...infer R extends MergeSource [ ] ,
1717]
1818 ? K extends keyof F
1919 ? [ F [ K ] , ...ExtractValue < R , K > ]
@@ -25,21 +25,19 @@ type SkipRules<O extends MergeOptions> =
2525 | ( O [ 'rules' ] extends { null : 'skip' } ? null : never )
2626
2727type LastValue <
28- T extends MergeRecord [ ] ,
28+ T extends MergeSource [ ] ,
2929 K extends PropertyKey ,
3030 O extends MergeOptions ,
3131> = T extends [ ...infer R , infer L ]
32- ? L extends MergeRecord
33- ? K extends keyof L
34- ? Exclude < L [ K ] , SkipRules < O > > extends never
35- ? LastValue < R extends MergeRecord [ ] ? R : [ ] , K , O >
36- : Exclude < L [ K ] , SkipRules < O > >
37- : LastValue < R extends MergeRecord [ ] ? R : [ ] , K , O >
38- : LastValue < R extends MergeRecord [ ] ? R : [ ] , K , O >
32+ ? K extends keyof L
33+ ? Exclude < L [ K ] , SkipRules < O > > extends never
34+ ? LastValue < R extends MergeSource [ ] ? R : [ ] , K , O >
35+ : Exclude < L [ K ] , SkipRules < O > >
36+ : LastValue < R extends MergeSource [ ] ? R : [ ] , K , O >
3937 : never
4038
4139type ArrayValue <
42- T extends MergeRecord [ ] ,
40+ T extends MergeSource [ ] ,
4341 K extends PropertyKey ,
4442 O extends MergeOptions ,
4543> = O [ 'rules' ] extends { array : 'override' }
@@ -67,14 +65,16 @@ export type MergePrimitives =
6765
6866export type MergeRecord = Record < PropertyKey , any >
6967
68+ export type MergeSource = MergeRecord | undefined
69+
7070export type MergeAllKeys < T extends any [ ] > = T extends [ infer K , ...infer R ]
7171 ? keyof K | MergeAllKeys < R extends any [ ] ? R : [ ] >
7272 : never
7373
7474export type MergeArray < T > = T extends any [ ] ? T [ number ] : never
7575
7676export type MergeValue <
77- T extends MergeRecord [ ] ,
77+ T extends MergeSource [ ] ,
7878 K extends PropertyKey ,
7979 O extends MergeOptions ,
8080> = O [ 'depth' ] extends 0
@@ -104,14 +104,14 @@ export type MergeExpand<T> = T extends infer U
104104 : never
105105
106106export type MergeTypes <
107- T extends MergeRecord [ ] ,
107+ T extends MergeSource [ ] ,
108108 O extends MergeOptions = MergeOptions ,
109109> = MergeExpand < {
110110 [ K in MergeAllKeys < T > ] : Exclude < MergeValue < T , K , O > , SkipRules < O > >
111111} >
112112
113113export type Merge <
114- T extends MergeRecord [ ] ,
114+ T extends MergeSource [ ] ,
115115 O extends MergeOptions = MergeOptions ,
116116> = MergeTypes < T , O >
117117
0 commit comments