Skip to content

Commit 42c11ff

Browse files
committed
Improve ParametricSelector as well
1 parent 6b9f951 commit 42c11ff

File tree

1 file changed

+42
-24
lines changed

1 file changed

+42
-24
lines changed

src/index.d.ts

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ declare namespace Reselect {
77
recomputations: () => number;
88
resetRecomputations: () => number;
99
}
10+
1011
type ParametricSelector<S, P, R> = (state: S, props: P, ...args: any[]) => R;
12+
interface OutputParametricSelector<S, P, R, C> extends ParametricSelector<S, P, R> {
13+
resultFunc: C;
14+
recomputations: () => number;
15+
resetRecomputations: () => number;
16+
}
1117

1218
/* one selector */
1319
function createSelector<S, R1, T>(
@@ -17,7 +23,7 @@ declare namespace Reselect {
1723
function createSelector<S, P, R1, T>(
1824
selector: ParametricSelector<S, P, R1>,
1925
combiner: (res: R1) => T,
20-
): ParametricSelector<S, P, T>;
26+
): OutputParametricSelector<S, P, T, (res: R1) => T>;
2127

2228
/* two selectors */
2329
function createSelector<S, R1, R2, T>(
@@ -29,7 +35,7 @@ declare namespace Reselect {
2935
selector1: ParametricSelector<S, P, R1>,
3036
selector2: ParametricSelector<S, P, R2>,
3137
combiner: (res1: R1, res2: R2) => T,
32-
): ParametricSelector<S, P, T>;
38+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2) => T>;
3339

3440
/* three selectors */
3541
function createSelector<S, R1, R2, R3, T>(
@@ -43,7 +49,7 @@ declare namespace Reselect {
4349
selector2: ParametricSelector<S, P, R2>,
4450
selector3: ParametricSelector<S, P, R3>,
4551
combiner: (res1: R1, res2: R2, res3: R3) => T,
46-
): ParametricSelector<S, P, T>;
52+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3) => T>;
4753

4854
/* four selectors */
4955
function createSelector<S, R1, R2, R3, R4, T>(
@@ -59,7 +65,7 @@ declare namespace Reselect {
5965
selector3: ParametricSelector<S, P, R3>,
6066
selector4: ParametricSelector<S, P, R4>,
6167
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T,
62-
): ParametricSelector<S, P, T>;
68+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T>;
6369

6470
/* five selectors */
6571
function createSelector<S, R1, R2, R3, R4, R5, T>(
@@ -77,7 +83,7 @@ declare namespace Reselect {
7783
selector4: ParametricSelector<S, P, R4>,
7884
selector5: ParametricSelector<S, P, R5>,
7985
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T,
80-
): ParametricSelector<S, P, T>;
86+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T>;
8187

8288
/* six selectors */
8389
function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
@@ -97,7 +103,7 @@ declare namespace Reselect {
97103
selector5: ParametricSelector<S, P, R5>,
98104
selector6: ParametricSelector<S, P, R6>,
99105
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T,
100-
): ParametricSelector<S, P, T>;
106+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T>;
101107

102108
/* seven selectors */
103109
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
@@ -122,7 +128,8 @@ declare namespace Reselect {
122128
selector7: ParametricSelector<S, P, R7>,
123129
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
124130
res7: R7) => T,
125-
): ParametricSelector<S, P, T>;
131+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
132+
res7: R7) => T>;
126133

127134
/* eight selectors */
128135
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
@@ -149,7 +156,8 @@ declare namespace Reselect {
149156
selector8: ParametricSelector<S, P, R8>,
150157
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
151158
res7: R7, res8: R8) => T,
152-
): ParametricSelector<S, P, T>;
159+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
160+
res7: R7, res8: R8) => T>;
153161

154162
/* nine selectors */
155163
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
@@ -178,7 +186,8 @@ declare namespace Reselect {
178186
selector9: ParametricSelector<S, P, R9>,
179187
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
180188
res7: R7, res8: R8, res9: R9) => T,
181-
): ParametricSelector<S, P, T>;
189+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
190+
res7: R7, res8: R8, res9: R9) => T>;
182191

183192
/* ten selectors */
184193
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
@@ -209,7 +218,8 @@ declare namespace Reselect {
209218
selector10: ParametricSelector<S, P, R10>,
210219
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
211220
res7: R7, res8: R8, res9: R9, res10: R10) => T,
212-
): ParametricSelector<S, P, T>;
221+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
222+
res7: R7, res8: R8, res9: R9, res10: R10) => T>;
213223

214224
/* eleven selectors */
215225
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
@@ -242,7 +252,8 @@ declare namespace Reselect {
242252
selector11: ParametricSelector<S, P, R11>,
243253
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
244254
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T,
245-
): ParametricSelector<S, P, T>;
255+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
256+
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T>;
246257

247258
/* twelve selectors */
248259
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
@@ -277,7 +288,8 @@ declare namespace Reselect {
277288
selector12: ParametricSelector<S, P, R12>,
278289
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
279290
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12) => T,
280-
): ParametricSelector<S, P, T>;
291+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
292+
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12) => T>;
281293

282294

283295
/* array argument */
@@ -290,7 +302,7 @@ declare namespace Reselect {
290302
function createSelector<S, P, R1, T>(
291303
selectors: [ParametricSelector<S, P, R1>],
292304
combiner: (res: R1) => T,
293-
): ParametricSelector<S, P, T>;
305+
): OutputParametricSelector<S, P, T, (res: R1) => T>;
294306

295307
/* two selectors */
296308
function createSelector<S, R1, R2, T>(
@@ -302,7 +314,7 @@ declare namespace Reselect {
302314
selectors: [ParametricSelector<S, P, R1>,
303315
ParametricSelector<S, P, R2>],
304316
combiner: (res1: R1, res2: R2) => T,
305-
): ParametricSelector<S, P, T>;
317+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2) => T>;
306318

307319
/* three selectors */
308320
function createSelector<S, R1, R2, R3, T>(
@@ -316,7 +328,7 @@ declare namespace Reselect {
316328
ParametricSelector<S, P, R2>,
317329
ParametricSelector<S, P, R3>],
318330
combiner: (res1: R1, res2: R2, res3: R3) => T,
319-
): ParametricSelector<S, P, T>;
331+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3) => T>;
320332

321333
/* four selectors */
322334
function createSelector<S, R1, R2, R3, R4, T>(
@@ -332,7 +344,7 @@ declare namespace Reselect {
332344
ParametricSelector<S, P, R3>,
333345
ParametricSelector<S, P, R4>],
334346
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T,
335-
): ParametricSelector<S, P, T>;
347+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T>;
336348

337349
/* five selectors */
338350
function createSelector<S, R1, R2, R3, R4, R5, T>(
@@ -350,7 +362,7 @@ declare namespace Reselect {
350362
ParametricSelector<S, P, R4>,
351363
ParametricSelector<S, P, R5>],
352364
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T,
353-
): ParametricSelector<S, P, T>;
365+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T>;
354366

355367
/* six selectors */
356368
function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
@@ -370,7 +382,7 @@ declare namespace Reselect {
370382
ParametricSelector<S, P, R5>,
371383
ParametricSelector<S, P, R6>],
372384
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T,
373-
): ParametricSelector<S, P, T>;
385+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T>;
374386

375387
/* seven selectors */
376388
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
@@ -395,7 +407,8 @@ declare namespace Reselect {
395407
ParametricSelector<S, P, R7>],
396408
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
397409
res7: R7) => T,
398-
): ParametricSelector<S, P, T>;
410+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
411+
res7: R7) => T>;
399412

400413
/* eight selectors */
401414
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
@@ -422,7 +435,8 @@ declare namespace Reselect {
422435
ParametricSelector<S, P, R8>],
423436
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
424437
res7: R7, res8: R8) => T,
425-
): ParametricSelector<S, P, T>;
438+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
439+
res7: R7, res8: R8) => T>;
426440

427441
/* nine selectors */
428442
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
@@ -451,7 +465,8 @@ declare namespace Reselect {
451465
ParametricSelector<S, P, R9>],
452466
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
453467
res7: R7, res8: R8, res9: R9) => T,
454-
): ParametricSelector<S, P, T>;
468+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
469+
res7: R7, res8: R8, res9: R9) => T>;
455470

456471
/* ten selectors */
457472
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
@@ -482,7 +497,8 @@ declare namespace Reselect {
482497
ParametricSelector<S, P, R10>],
483498
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
484499
res7: R7, res8: R8, res9: R9, res10: R10) => T,
485-
): ParametricSelector<S, P, T>;
500+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
501+
res7: R7, res8: R8, res9: R9, res10: R10) => T>;
486502

487503
/* eleven selectors */
488504
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
@@ -515,7 +531,8 @@ declare namespace Reselect {
515531
ParametricSelector<S, P, R11>],
516532
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
517533
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T,
518-
): ParametricSelector<S, P, T>;
534+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
535+
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T>;
519536

520537
/* twelve selectors */
521538
function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
@@ -550,7 +567,8 @@ declare namespace Reselect {
550567
ParametricSelector<S, P, R12>],
551568
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
552569
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12) => T,
553-
): ParametricSelector<S, P, T>;
570+
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
571+
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12) => T>;
554572

555573

556574
function defaultMemoize<F extends Function>(

0 commit comments

Comments
 (0)