Skip to content

Commit ba61be7

Browse files
committed
added typings for dynamic array of uniform selectors
1 parent 660de49 commit ba61be7

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/index.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,15 @@ export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R1
571571
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6,
572572
res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12) => T>;
573573

574+
/* any number of uniform selectors */
575+
export function createSelector<S, R, T>(
576+
selectors: Selector<S, R>[],
577+
combiner: (...res: R[]) => T,
578+
): OutputSelector<S, T, (...res: R[]) => T>;
579+
export function createSelector<S, P, R, T>(
580+
selectors: ParametricSelector<S, P, R>[],
581+
combiner: (...res: R[]) => T,
582+
): OutputParametricSelector<S, P, T, (...res: R[]) => T>;
574583

575584
export function defaultMemoize<F extends Function>(
576585
func: F, equalityCheck?: <T>(a: T, b: T, index: number) => boolean,

typescript_test/test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,3 +406,26 @@ function testCreateStructuredSelector() {
406406
baz: state => state.foo
407407
});
408408
}
409+
410+
function testDynamicArrayArgument() {
411+
interface Elem {
412+
val1: string;
413+
val2: string;
414+
}
415+
const data: ReadonlyArray<Elem> = [{val1: 'a', val2: 'aa'}, {val1: 'b', val2: 'bb'}];
416+
417+
createSelector(data.map(obj => () => obj.val1), (...vals) => vals.join(','));
418+
419+
// typings:expect-error
420+
createSelector(data.map(obj => () => obj.val1), (vals) => vals.join(','))
421+
422+
createSelector(data.map(obj => () => obj.val1), (...vals: string[]) => 0)
423+
// typings:expect-error
424+
createSelector(data.map(obj => () => obj.val1), (...vals: number[]) => 0)
425+
426+
const s = createSelector(data.map(obj => (state: {}, fld: keyof Elem) => obj[fld]), (...vals) => vals.join(','));
427+
s({}, 'val1');
428+
s({}, 'val2');
429+
// typings:expect-error
430+
s({}, 'val3');
431+
}

0 commit comments

Comments
 (0)