Skip to content

Commit 2bc9a4c

Browse files
committed
Add resultFunc, recomputations and resetRecomputations to the typings
1 parent 801317f commit 2bc9a4c

File tree

2 files changed

+46
-30
lines changed

2 files changed

+46
-30
lines changed

src/index.d.ts

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
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;
68

79
/* one selector */
810
export function createSelector<S, R1, T>(
911
selector: Selector<S, R1>,
1012
combiner: (res: R1) => T,
11-
): Selector<S, T>;
13+
): OutputSelector<S, T, (res: R1) => T>;
1214
export function createSelector<S, P, R1, T>(
1315
selector: ParametricSelector<S, P, R1>,
1416
combiner: (res: R1) => T,
@@ -19,7 +21,7 @@ export function createSelector<S, R1, R2, T>(
1921
selector1: Selector<S, R1>,
2022
selector2: Selector<S, R2>,
2123
combiner: (res1: R1, res2: R2) => T,
22-
): Selector<S, T>;
24+
): OutputSelector<S, T, (res1: R1, res2: R2) => T>;
2325
export function createSelector<S, P, R1, R2, T>(
2426
selector1: ParametricSelector<S, P, R1>,
2527
selector2: ParametricSelector<S, P, R2>,
@@ -32,7 +34,7 @@ export function createSelector<S, R1, R2, R3, T>(
3234
selector2: Selector<S, R2>,
3335
selector3: Selector<S, R3>,
3436
combiner: (res1: R1, res2: R2, res3: R3) => T,
35-
): Selector<S, T>;
37+
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3) => T>;
3638
export function createSelector<S, P, R1, R2, R3, T>(
3739
selector1: ParametricSelector<S, P, R1>,
3840
selector2: ParametricSelector<S, P, R2>,
@@ -47,7 +49,7 @@ export function createSelector<S, R1, R2, R3, R4, T>(
4749
selector3: Selector<S, R3>,
4850
selector4: Selector<S, R4>,
4951
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>;
5153
export function createSelector<S, P, R1, R2, R3, R4, T>(
5254
selector1: ParametricSelector<S, P, R1>,
5355
selector2: ParametricSelector<S, P, R2>,
@@ -64,7 +66,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, T>(
6466
selector4: Selector<S, R4>,
6567
selector5: Selector<S, R5>,
6668
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>;
6870
export function createSelector<S, P, R1, R2, R3, R4, R5, T>(
6971
selector1: ParametricSelector<S, P, R1>,
7072
selector2: ParametricSelector<S, P, R2>,
@@ -83,7 +85,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
8385
selector5: Selector<S, R5>,
8486
selector6: Selector<S, R6>,
8587
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>;
8789
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, T>(
8890
selector1: ParametricSelector<S, P, R1>,
8991
selector2: ParametricSelector<S, P, R2>,
@@ -105,7 +107,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
105107
selector7: Selector<S, R7>,
106108
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
107109
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>;
109112
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, T>(
110113
selector1: ParametricSelector<S, P, R1>,
111114
selector2: ParametricSelector<S, P, R2>,
@@ -130,7 +133,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
130133
selector8: Selector<S, R8>,
131134
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
132135
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>;
134138
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(
135139
selector1: ParametricSelector<S, P, R1>,
136140
selector2: ParametricSelector<S, P, R2>,
@@ -157,7 +161,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
157161
selector9: Selector<S, R9>,
158162
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
159163
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>;
161166
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
162167
selector1: ParametricSelector<S, P, R1>,
163168
selector2: ParametricSelector<S, P, R2>,
@@ -186,7 +191,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
186191
selector10: Selector<S, R10>,
187192
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
188193
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>;
190196
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
191197
selector1: ParametricSelector<S, P, R1>,
192198
selector2: ParametricSelector<S, P, R2>,
@@ -217,7 +223,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
217223
selector11: Selector<S, R11>,
218224
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
219225
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>;
221228
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
222229
selector1: ParametricSelector<S, P, R1>,
223230
selector2: ParametricSelector<S, P, R2>,
@@ -250,7 +257,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
250257
selector12: Selector<S, R12>,
251258
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
252259
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>;
254262
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
255263
selector1: ParametricSelector<S, P, R1>,
256264
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
275283
export function createSelector<S, R1, T>(
276284
selectors: [Selector<S, R1>],
277285
combiner: (res: R1) => T,
278-
): Selector<S, T>;
286+
): OutputSelector<S, T, (res: R1) => T>;
279287
export function createSelector<S, P, R1, T>(
280288
selectors: [ParametricSelector<S, P, R1>],
281289
combiner: (res: R1) => T,
@@ -286,7 +294,7 @@ export function createSelector<S, R1, R2, T>(
286294
selectors: [Selector<S, R1>,
287295
Selector<S, R2>],
288296
combiner: (res1: R1, res2: R2) => T,
289-
): Selector<S, T>;
297+
): OutputSelector<S, T, (res1: R1, res2: R2) => T>;
290298
export function createSelector<S, P, R1, R2, T>(
291299
selectors: [ParametricSelector<S, P, R1>,
292300
ParametricSelector<S, P, R2>],
@@ -299,7 +307,7 @@ export function createSelector<S, R1, R2, R3, T>(
299307
Selector<S, R2>,
300308
Selector<S, R3>],
301309
combiner: (res1: R1, res2: R2, res3: R3) => T,
302-
): Selector<S, T>;
310+
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3) => T>;
303311
export function createSelector<S, P, R1, R2, R3, T>(
304312
selectors: [ParametricSelector<S, P, R1>,
305313
ParametricSelector<S, P, R2>,
@@ -314,7 +322,7 @@ export function createSelector<S, R1, R2, R3, R4, T>(
314322
Selector<S, R3>,
315323
Selector<S, R4>],
316324
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>;
318326
export function createSelector<S, P, R1, R2, R3, R4, T>(
319327
selectors: [ParametricSelector<S, P, R1>,
320328
ParametricSelector<S, P, R2>,
@@ -331,7 +339,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, T>(
331339
Selector<S, R4>,
332340
Selector<S, R5>],
333341
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>;
335343
export function createSelector<S, P, R1, R2, R3, R4, R5, T>(
336344
selectors: [ParametricSelector<S, P, R1>,
337345
ParametricSelector<S, P, R2>,
@@ -350,7 +358,7 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
350358
Selector<S, R5>,
351359
Selector<S, R6>],
352360
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>;
354362
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, T>(
355363
selectors: [ParametricSelector<S, P, R1>,
356364
ParametricSelector<S, P, R2>,
@@ -372,7 +380,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
372380
Selector<S, R7>],
373381
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
374382
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>;
376385
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, T>(
377386
selectors: [ParametricSelector<S, P, R1>,
378387
ParametricSelector<S, P, R2>,
@@ -397,7 +406,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
397406
Selector<S, R8>],
398407
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
399408
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>;
401411
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(
402412
selectors: [ParametricSelector<S, P, R1>,
403413
ParametricSelector<S, P, R2>,
@@ -424,7 +434,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
424434
Selector<S, R9>],
425435
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
426436
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>;
428439
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
429440
selectors: [ParametricSelector<S, P, R1>,
430441
ParametricSelector<S, P, R2>,
@@ -453,7 +464,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
453464
Selector<S, R10>],
454465
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
455466
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>;
457469
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
458470
selectors: [ParametricSelector<S, P, R1>,
459471
ParametricSelector<S, P, R2>,
@@ -484,7 +496,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
484496
Selector<S, R11>],
485497
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
486498
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>;
488501
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
489502
selectors: [ParametricSelector<S, P, R1>,
490503
ParametricSelector<S, P, R2>,
@@ -517,7 +530,8 @@ export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
517530
Selector<S, R12>],
518531
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
519532
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>;
521535
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
522536
selectors: [ParametricSelector<S, P, R1>,
523537
ParametricSelector<S, P, R2>,

typescript_test/test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import {
66
ParametricSelector,
77
} from '../src/index';
88

9-
10-
119
function testSelector() {
1210
type State = {foo: string};
1311

@@ -16,6 +14,10 @@ function testSelector() {
1614
(foo) => foo,
1715
);
1816

17+
const res = selector.resultFunc('test');
18+
selector.recomputations();
19+
selector.resetRecomputations();
20+
1921
const foo: string = selector({foo: 'bar'});
2022

2123
// typings:expect-error

0 commit comments

Comments
 (0)