Skip to content

Commit 2546cd6

Browse files
volivajosepot
authored andcommitted
Merge common extractor types
1 parent 3d8db7b commit 2546cd6

File tree

2 files changed

+31
-34
lines changed

2 files changed

+31
-34
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"typesVersions": {
1717
">=4.1": {
1818
"*": [
19-
"types/ts4.1/*"
19+
"types/ts4.1/index.d.ts"
2020
]
2121
}
2222
},

types/ts4.1/index.d.ts

+30-33
Original file line numberDiff line numberDiff line change
@@ -33,72 +33,69 @@ export function createIdSelector<P>(
3333
/// createSelector ///
3434
//////////////////////
3535

36-
type ExtractSelectorResult<
37-
T extends ReadonlyArray<Selector<unknown, unknown>>
38-
> = {
39-
[Index in keyof T]: T[Index] extends Selector<any, infer R> ? R : never
40-
}
41-
type ExtractSelectorInput<
42-
T extends ReadonlyArray<Selector<unknown, unknown>>
43-
> = {
44-
[Index in keyof T]: T[Index] extends Selector<infer I, any> ? I : never
45-
}
46-
type MergeTypes<T extends ReadonlyArray<unknown>> = T extends [
47-
infer F,
48-
...(infer R)
49-
]
50-
? F & MergeTypes<R>
51-
: {}
52-
53-
type ExtractParametricSelectorResult<
54-
T extends ReadonlyArray<ParametricSelector<unknown, unknown, unknown>>
36+
type ExtractSelectorsResult<
37+
T extends ReadonlyArray<
38+
Selector<unknown, unknown> | ParametricSelector<unknown, unknown, unknown>
39+
>
5540
> = {
56-
[Index in keyof T]: T[Index] extends ParametricSelector<any, any, infer R>
57-
? R
41+
[Index in keyof T]: T[Index] extends Selector<any, infer Result>
42+
? Result
43+
: T[Index] extends ParametricSelector<any, any, infer Result>
44+
? Result
5845
: never
5946
}
60-
type ExtractParametricSelectorProps<
61-
T extends ReadonlyArray<ParametricSelector<unknown, unknown, unknown>>
47+
type ExtractSelectorsInput<
48+
T extends ReadonlyArray<
49+
Selector<unknown, unknown> | ParametricSelector<unknown, unknown, unknown>
50+
>
6251
> = {
63-
[Index in keyof T]: T[Index] extends ParametricSelector<any, infer P, any>
64-
? P
52+
[Index in keyof T]: T[Index] extends Selector<infer Input, any>
53+
? Input
54+
: T[Index] extends ParametricSelector<infer Input, any, any>
55+
? Input
6556
: never
6657
}
67-
type ExtractParametricSelectorInput<
58+
type ExtractSelectorsProps<
6859
T extends ReadonlyArray<ParametricSelector<unknown, unknown, unknown>>
6960
> = {
70-
[Index in keyof T]: T[Index] extends ParametricSelector<infer I, any, any>
71-
? I
61+
[Index in keyof T]: T[Index] extends ParametricSelector<any, infer Props, any>
62+
? Props
7263
: never
7364
}
65+
type MergeTypes<T extends ReadonlyArray<unknown>, Acc = {}> = T extends [
66+
infer Front,
67+
...(infer Tail)
68+
]
69+
? MergeTypes<Tail, Front & Acc>
70+
: Acc
7471

7572
type EqualityFn<T> = (a: T, b: T) => boolean
7673
interface SelectorCreator {
7774
<
7875
T,
7976
S extends ReadonlyArray<Selector<any, any>>,
80-
Args extends ExtractSelectorResult<S>
77+
Args extends ExtractSelectorsResult<S>
8178
>(
8279
selectors: [...S],
8380
combiner: (...results: Args) => T,
8481
equalityFn?: EqualityFn<T>
8582
): OutputSelector<
86-
MergeTypes<ExtractSelectorInput<S>>,
83+
MergeTypes<ExtractSelectorsInput<S>>,
8784
T,
8885
(...results: Args) => T
8986
>
9087

9188
<
9289
T,
9390
S extends ReadonlyArray<ParametricSelector<any, any, any>>,
94-
Args extends ExtractParametricSelectorResult<S>
91+
Args extends ExtractSelectorsResult<S>
9592
>(
9693
selectors: [...S],
9794
combiner: (...results: Args) => T,
9895
equalityFn?: EqualityFn<T>
9996
): OutputParametricSelector<
100-
MergeTypes<ExtractParametricSelectorInput<S>>,
101-
MergeTypes<ExtractParametricSelectorProps<S>>,
97+
MergeTypes<ExtractSelectorsInput<S>>,
98+
MergeTypes<ExtractSelectorsProps<S>>,
10299
T,
103100
(...results: Args) => T
104101
>

0 commit comments

Comments
 (0)