1
1
export type Selector < S , R > = ( state : S ) => R ;
2
-
3
- export type ParametricSelector < S , P , R > = ( state : S , props : P ,
4
- ...args : any [ ] ) => R ;
5
-
2
+ export interface OutputSelector < S , R , C > extends Selector < S , R > {
3
+ resultFunc : C ;
4
+ recomputations : ( ) => number ;
5
+ resetRecomputations : ( ) => number ;
6
+ }
7
+ export type ParametricSelector < S , P , R > = ( state : S , props : P , ...args : any [ ] ) => R ;
6
8
7
9
/* one selector */
8
10
export function createSelector < S , R1 , T > (
9
11
selector : Selector < S , R1 > ,
10
12
combiner : ( res : R1 ) => T ,
11
- ) : Selector < S , T > ;
13
+ ) : OutputSelector < S , T , ( res : R1 ) => T > ;
12
14
export function createSelector < S , P , R1 , T > (
13
15
selector : ParametricSelector < S , P , R1 > ,
14
16
combiner : ( res : R1 ) => T ,
@@ -19,7 +21,7 @@ export function createSelector<S, R1, R2, T>(
19
21
selector1 : Selector < S , R1 > ,
20
22
selector2 : Selector < S , R2 > ,
21
23
combiner : ( res1 : R1 , res2 : R2 ) => T ,
22
- ) : Selector < S , T > ;
24
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 ) => T > ;
23
25
export function createSelector < S , P , R1 , R2 , T > (
24
26
selector1 : ParametricSelector < S , P , R1 > ,
25
27
selector2 : ParametricSelector < S , P , R2 > ,
@@ -32,7 +34,7 @@ export function createSelector<S, R1, R2, R3, T>(
32
34
selector2 : Selector < S , R2 > ,
33
35
selector3 : Selector < S , R3 > ,
34
36
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 ) => T ,
35
- ) : Selector < S , T > ;
37
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 ) => T > ;
36
38
export function createSelector < S , P , R1 , R2 , R3 , T > (
37
39
selector1 : ParametricSelector < S , P , R1 > ,
38
40
selector2 : ParametricSelector < S , P , R2 > ,
@@ -47,7 +49,7 @@ export function createSelector<S, R1, R2, R3, R4, T>(
47
49
selector3 : Selector < S , R3 > ,
48
50
selector4 : Selector < S , R4 > ,
49
51
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 ) => T ,
50
- ) : Selector < S , T > ;
52
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 ) => T > ;
51
53
export function createSelector < S , P , R1 , R2 , R3 , R4 , T > (
52
54
selector1 : ParametricSelector < S , P , R1 > ,
53
55
selector2 : ParametricSelector < S , P , R2 > ,
@@ -64,7 +66,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, T>(
64
66
selector4 : Selector < S , R4 > ,
65
67
selector5 : Selector < S , R5 > ,
66
68
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 ) => T ,
67
- ) : Selector < S , T > ;
69
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 ) => T > ;
68
70
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , T > (
69
71
selector1 : ParametricSelector < S , P , R1 > ,
70
72
selector2 : ParametricSelector < S , P , R2 > ,
@@ -83,7 +85,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
83
85
selector5 : Selector < S , R5 > ,
84
86
selector6 : Selector < S , R6 > ,
85
87
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ) => T ,
86
- ) : Selector < S , T > ;
88
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ) => T > ;
87
89
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , T > (
88
90
selector1 : ParametricSelector < S , P , R1 > ,
89
91
selector2 : ParametricSelector < S , P , R2 > ,
@@ -105,7 +107,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
105
107
selector7 : Selector < S , R7 > ,
106
108
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
107
109
res7 : R7 ) => T ,
108
- ) : Selector < S , T > ;
110
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
111
+ res7 : R7 ) => T > ;
109
112
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , T > (
110
113
selector1 : ParametricSelector < S , P , R1 > ,
111
114
selector2 : ParametricSelector < S , P , R2 > ,
@@ -130,7 +133,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
130
133
selector8 : Selector < S , R8 > ,
131
134
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
132
135
res7 : R7 , res8 : R8 ) => T ,
133
- ) : Selector < S , T > ;
136
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
137
+ res7 : R7 , res8 : R8 ) => T > ;
134
138
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , T > (
135
139
selector1 : ParametricSelector < S , P , R1 > ,
136
140
selector2 : ParametricSelector < S , P , R2 > ,
@@ -157,7 +161,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
157
161
selector9 : Selector < S , R9 > ,
158
162
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
159
163
res7 : R7 , res8 : R8 , res9 : R9 ) => T ,
160
- ) : Selector < S , T > ;
164
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
165
+ res7 : R7 , res8 : R8 , res9 : R9 ) => T > ;
161
166
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , T > (
162
167
selector1 : ParametricSelector < S , P , R1 > ,
163
168
selector2 : ParametricSelector < S , P , R2 > ,
@@ -186,7 +191,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
186
191
selector10 : Selector < S , R10 > ,
187
192
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
188
193
res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 ) => T ,
189
- ) : Selector < S , T > ;
194
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
195
+ res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 ) => T > ;
190
196
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , R10 , T > (
191
197
selector1 : ParametricSelector < S , P , R1 > ,
192
198
selector2 : ParametricSelector < S , P , R2 > ,
@@ -217,7 +223,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
217
223
selector11 : Selector < S , R11 > ,
218
224
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
219
225
res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 ) => T ,
220
- ) : Selector < S , T > ;
226
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
227
+ res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 ) => T > ;
221
228
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , R10 , R11 , T > (
222
229
selector1 : ParametricSelector < S , P , R1 > ,
223
230
selector2 : ParametricSelector < S , P , R2 > ,
@@ -250,7 +257,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
250
257
selector12 : Selector < S , R12 > ,
251
258
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
252
259
res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 , res12 : R12 ) => T ,
253
- ) : Selector < S , T > ;
260
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
261
+ res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 , res12 : R12 ) => T > ;
254
262
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , R10 , R11 , R12 , T > (
255
263
selector1 : ParametricSelector < S , P , R1 > ,
256
264
selector2 : ParametricSelector < S , P , R2 > ,
@@ -275,7 +283,7 @@ export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R1
275
283
export function createSelector < S , R1 , T > (
276
284
selectors : [ Selector < S , R1 > ] ,
277
285
combiner : ( res : R1 ) => T ,
278
- ) : Selector < S , T > ;
286
+ ) : OutputSelector < S , T , ( res : R1 ) => T > ;
279
287
export function createSelector < S , P , R1 , T > (
280
288
selectors : [ ParametricSelector < S , P , R1 > ] ,
281
289
combiner : ( res : R1 ) => T ,
@@ -286,7 +294,7 @@ export function createSelector<S, R1, R2, T>(
286
294
selectors : [ Selector < S , R1 > ,
287
295
Selector < S , R2 > ] ,
288
296
combiner : ( res1 : R1 , res2 : R2 ) => T ,
289
- ) : Selector < S , T > ;
297
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 ) => T > ;
290
298
export function createSelector < S , P , R1 , R2 , T > (
291
299
selectors : [ ParametricSelector < S , P , R1 > ,
292
300
ParametricSelector < S , P , R2 > ] ,
@@ -299,7 +307,7 @@ export function createSelector<S, R1, R2, R3, T>(
299
307
Selector < S , R2 > ,
300
308
Selector < S , R3 > ] ,
301
309
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 ) => T ,
302
- ) : Selector < S , T > ;
310
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 ) => T > ;
303
311
export function createSelector < S , P , R1 , R2 , R3 , T > (
304
312
selectors : [ ParametricSelector < S , P , R1 > ,
305
313
ParametricSelector < S , P , R2 > ,
@@ -314,7 +322,7 @@ export function createSelector<S, R1, R2, R3, R4, T>(
314
322
Selector < S , R3 > ,
315
323
Selector < S , R4 > ] ,
316
324
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 ) => T ,
317
- ) : Selector < S , T > ;
325
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 ) => T > ;
318
326
export function createSelector < S , P , R1 , R2 , R3 , R4 , T > (
319
327
selectors : [ ParametricSelector < S , P , R1 > ,
320
328
ParametricSelector < S , P , R2 > ,
@@ -331,7 +339,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, T>(
331
339
Selector < S , R4 > ,
332
340
Selector < S , R5 > ] ,
333
341
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 ) => T ,
334
- ) : Selector < S , T > ;
342
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 ) => T > ;
335
343
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , T > (
336
344
selectors : [ ParametricSelector < S , P , R1 > ,
337
345
ParametricSelector < S , P , R2 > ,
@@ -350,7 +358,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
350
358
Selector < S , R5 > ,
351
359
Selector < S , R6 > ] ,
352
360
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ) => T ,
353
- ) : Selector < S , T > ;
361
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ) => T > ;
354
362
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , T > (
355
363
selectors : [ ParametricSelector < S , P , R1 > ,
356
364
ParametricSelector < S , P , R2 > ,
@@ -372,7 +380,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
372
380
Selector < S , R7 > ] ,
373
381
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
374
382
res7 : R7 ) => T ,
375
- ) : Selector < S , T > ;
383
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
384
+ res7 : R7 ) => T > ;
376
385
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , T > (
377
386
selectors : [ ParametricSelector < S , P , R1 > ,
378
387
ParametricSelector < S , P , R2 > ,
@@ -397,7 +406,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
397
406
Selector < S , R8 > ] ,
398
407
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
399
408
res7 : R7 , res8 : R8 ) => T ,
400
- ) : Selector < S , T > ;
409
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
410
+ res7 : R7 , res8 : R8 ) => T > ;
401
411
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , T > (
402
412
selectors : [ ParametricSelector < S , P , R1 > ,
403
413
ParametricSelector < S , P , R2 > ,
@@ -424,7 +434,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
424
434
Selector < S , R9 > ] ,
425
435
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
426
436
res7 : R7 , res8 : R8 , res9 : R9 ) => T ,
427
- ) : Selector < S , T > ;
437
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
438
+ res7 : R7 , res8 : R8 , res9 : R9 ) => T > ;
428
439
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , T > (
429
440
selectors : [ ParametricSelector < S , P , R1 > ,
430
441
ParametricSelector < S , P , R2 > ,
@@ -453,7 +464,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
453
464
Selector < S , R10 > ] ,
454
465
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
455
466
res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 ) => T ,
456
- ) : Selector < S , T > ;
467
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
468
+ res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 ) => T > ;
457
469
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , R10 , T > (
458
470
selectors : [ ParametricSelector < S , P , R1 > ,
459
471
ParametricSelector < S , P , R2 > ,
@@ -484,7 +496,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
484
496
Selector < S , R11 > ] ,
485
497
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
486
498
res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 ) => T ,
487
- ) : Selector < S , T > ;
499
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
500
+ res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 ) => T > ;
488
501
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , R10 , R11 , T > (
489
502
selectors : [ ParametricSelector < S , P , R1 > ,
490
503
ParametricSelector < S , P , R2 > ,
@@ -517,7 +530,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
517
530
Selector < S , R12 > ] ,
518
531
combiner : ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
519
532
res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 , res12 : R12 ) => T ,
520
- ) : Selector < S , T > ;
533
+ ) : OutputSelector < S , T , ( res1 : R1 , res2 : R2 , res3 : R3 , res4 : R4 , res5 : R5 , res6 : R6 ,
534
+ res7 : R7 , res8 : R8 , res9 : R9 , res10 : R10 , res11 : R11 , res12 : R12 ) => T > ;
521
535
export function createSelector < S , P , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 , R9 , R10 , R11 , R12 , T > (
522
536
selectors : [ ParametricSelector < S , P , R1 > ,
523
537
ParametricSelector < S , P , R2 > ,
0 commit comments