reselect
Version:
Selectors for Redux.
2,553 lines (2,502 loc) • 62.3 kB
TypeScript
export as namespace Reselect
export type Selector<S, R> = (state: S) => R
export type OutputSelector<S, R, C> = Selector<S, R> & {
resultFunc: C
recomputations: () => number
resetRecomputations: () => number
}
export type ParametricSelector<S, P, R> = (
state: S,
props: P,
...args: any[]
) => R
export type OutputParametricSelector<S, P, R, C> = ParametricSelector<
S,
P,
R
> & {
resultFunc: C
recomputations: () => number
resetRecomputations: () => number
}
/* homogeneous selector parameter types */
/* one selector */
export function createSelector<S, R1, T>(
selector: Selector<S, R1>,
combiner: (res: R1) => T
): OutputSelector<S, T, (res: R1) => T>
export function createSelector<S, P, R1, T>(
selector: ParametricSelector<S, P, R1>,
combiner: (res: R1) => T
): OutputParametricSelector<S, P, T, (res: R1) => T>
/* two selectors */
export function createSelector<S, R1, R2, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
combiner: (res1: R1, res2: R2) => T
): OutputSelector<S, T, (res1: R1, res2: R2) => T>
export function createSelector<S, P, R1, R2, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
combiner: (res1: R1, res2: R2) => T
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2) => T>
/* three selectors */
export function createSelector<S, R1, R2, R3, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3) => T>
export function createSelector<S, P, R1, R2, R3, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3) => T>
/* four selectors */
export function createSelector<S, R1, R2, R3, R4, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T>
export function createSelector<S, P, R1, R2, R3, R4, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4) => T
>
/* five selectors */
export function createSelector<S, R1, R2, R3, R4, R5, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T>
export function createSelector<S, P, R1, R2, R3, R4, R5, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
>
/* six selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputSelector<
S,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
selector6: ParametricSelector<S, P, R6>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
/* seven selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
selector7: Selector<S, R7>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7
) => T
): OutputSelector<
S,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
selector6: ParametricSelector<S, P, R6>,
selector7: ParametricSelector<S, P, R7>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7
) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T
>
/* eight selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
selector7: Selector<S, R7>,
selector8: Selector<S, R8>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
selector6: ParametricSelector<S, P, R6>,
selector7: ParametricSelector<S, P, R7>,
selector8: ParametricSelector<S, P, R8>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
>
/* nine selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
selector7: Selector<S, R7>,
selector8: Selector<S, R8>,
selector9: Selector<S, R9>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
selector6: ParametricSelector<S, P, R6>,
selector7: ParametricSelector<S, P, R7>,
selector8: ParametricSelector<S, P, R8>,
selector9: ParametricSelector<S, P, R9>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
>
/* ten selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
selector7: Selector<S, R7>,
selector8: Selector<S, R8>,
selector9: Selector<S, R9>,
selector10: Selector<S, R10>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
>
export function createSelector<
S,
P,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
T
>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
selector6: ParametricSelector<S, P, R6>,
selector7: ParametricSelector<S, P, R7>,
selector8: ParametricSelector<S, P, R8>,
selector9: ParametricSelector<S, P, R9>,
selector10: ParametricSelector<S, P, R10>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
>
/* eleven selectors */
export function createSelector<
S,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
T
>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
selector7: Selector<S, R7>,
selector8: Selector<S, R8>,
selector9: Selector<S, R9>,
selector10: Selector<S, R10>,
selector11: Selector<S, R11>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
>
export function createSelector<
S,
P,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
T
>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
selector6: ParametricSelector<S, P, R6>,
selector7: ParametricSelector<S, P, R7>,
selector8: ParametricSelector<S, P, R8>,
selector9: ParametricSelector<S, P, R9>,
selector10: ParametricSelector<S, P, R10>,
selector11: ParametricSelector<S, P, R11>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
>
/* twelve selectors */
export function createSelector<
S,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
R12,
T
>(
selector1: Selector<S, R1>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
selector7: Selector<S, R7>,
selector8: Selector<S, R8>,
selector9: Selector<S, R9>,
selector10: Selector<S, R10>,
selector11: Selector<S, R11>,
selector12: Selector<S, R12>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
>
export function createSelector<
S,
P,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
R12,
T
>(
selector1: ParametricSelector<S, P, R1>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
selector6: ParametricSelector<S, P, R6>,
selector7: ParametricSelector<S, P, R7>,
selector8: ParametricSelector<S, P, R8>,
selector9: ParametricSelector<S, P, R9>,
selector10: ParametricSelector<S, P, R10>,
selector11: ParametricSelector<S, P, R11>,
selector12: ParametricSelector<S, P, R12>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
>
/* array argument */
/* one selector */
export function createSelector<S, R1, T>(
selectors: [Selector<S, R1>],
combiner: (res: R1) => T
): OutputSelector<S, T, (res: R1) => T>
export function createSelector<S, P, R1, T>(
selectors: [ParametricSelector<S, P, R1>],
combiner: (res: R1) => T
): OutputParametricSelector<S, P, T, (res: R1) => T>
/* two selectors */
export function createSelector<S, R1, R2, T>(
selectors: [Selector<S, R1>, Selector<S, R2>],
combiner: (res1: R1, res2: R2) => T
): OutputSelector<S, T, (res1: R1, res2: R2) => T>
export function createSelector<S, P, R1, R2, T>(
selectors: [ParametricSelector<S, P, R1>, ParametricSelector<S, P, R2>],
combiner: (res1: R1, res2: R2) => T
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2) => T>
/* three selectors */
export function createSelector<S, R1, R2, R3, T>(
selectors: [Selector<S, R1>, Selector<S, R2>, Selector<S, R3>],
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3) => T>
export function createSelector<S, P, R1, R2, R3, T>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>
],
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputParametricSelector<S, P, T, (res1: R1, res2: R2, res3: R3) => T>
/* four selectors */
export function createSelector<S, R1, R2, R3, R4, T>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T>
export function createSelector<S, P, R1, R2, R3, R4, T>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4) => T
>
/* five selectors */
export function createSelector<S, R1, R2, R3, R4, R5, T>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputSelector<S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T>
export function createSelector<S, P, R1, R2, R3, R4, R5, T>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
>
/* six selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, T>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputSelector<
S,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, T>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
/* seven selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, T>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7
) => T
): OutputSelector<
S,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, T>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>,
ParametricSelector<S, P, R7>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7
) => T
): OutputParametricSelector<
S,
P,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T
>
/* eight selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, T>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>,
Selector<S, R8>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>,
ParametricSelector<S, P, R7>,
ParametricSelector<S, P, R8>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
>
/* nine selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>,
Selector<S, R8>,
Selector<S, R9>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
>
export function createSelector<S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>,
ParametricSelector<S, P, R7>,
ParametricSelector<S, P, R8>,
ParametricSelector<S, P, R9>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
>
/* ten selectors */
export function createSelector<S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>,
Selector<S, R8>,
Selector<S, R9>,
Selector<S, R10>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
>
export function createSelector<
S,
P,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
T
>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>,
ParametricSelector<S, P, R7>,
ParametricSelector<S, P, R8>,
ParametricSelector<S, P, R9>,
ParametricSelector<S, P, R10>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
>
/* eleven selectors */
export function createSelector<
S,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
T
>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>,
Selector<S, R8>,
Selector<S, R9>,
Selector<S, R10>,
Selector<S, R11>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
>
export function createSelector<
S,
P,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
T
>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>,
ParametricSelector<S, P, R7>,
ParametricSelector<S, P, R8>,
ParametricSelector<S, P, R9>,
ParametricSelector<S, P, R10>,
ParametricSelector<S, P, R11>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
>
/* twelve selectors */
export function createSelector<
S,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
R12,
T
>(
selectors: [
Selector<S, R1>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>,
Selector<S, R8>,
Selector<S, R9>,
Selector<S, R10>,
Selector<S, R11>,
Selector<S, R12>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
): OutputSelector<
S,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
>
export function createSelector<
S,
P,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
R12,
T
>(
selectors: [
ParametricSelector<S, P, R1>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>,
ParametricSelector<S, P, R7>,
ParametricSelector<S, P, R8>,
ParametricSelector<S, P, R9>,
ParametricSelector<S, P, R10>,
ParametricSelector<S, P, R11>,
ParametricSelector<S, P, R12>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
): OutputParametricSelector<
S,
P,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
>
/* heterogeneous selector parameter types */
/* one selector */
export function createSelector<S1, R1, T>(
selector1: Selector<S1, R1>,
combiner: (res1: R1) => T
): OutputSelector<S1, T, (res1: R1) => T>
export function createSelector<S1, P1, R1, T>(
selector1: ParametricSelector<S1, P1, R1>,
combiner: (res1: R1) => T
): OutputParametricSelector<S1, P1, T, (res1: R1) => T>
/* two selector */
export function createSelector<S1, S2, R1, R2, T>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
combiner: (res1: R1, res2: R2) => T
): OutputSelector<S1 & S2, T, (res1: R1, res2: R2) => T>
export function createSelector<S1, S2, P1, P2, R1, R2, T>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
combiner: (res1: R1, res2: R2) => T
): OutputParametricSelector<S1 & S2, P1 & P2, T, (res1: R1, res2: R2) => T>
/* three selector */
export function createSelector<S1, S2, S3, R1, R2, R3, T>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputSelector<S1 & S2 & S3, T, (res1: R1, res2: R2, res3: R3) => T>
export function createSelector<S1, S2, S3, P1, P2, P3, R1, R2, R3, T>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputParametricSelector<
S1 & S2 & S3,
P1 & P2 & P3,
T,
(res1: R1, res2: R2, res3: R3) => T
>
/* four selector */
export function createSelector<S1, S2, S3, S4, R1, R2, R3, R4, T>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputSelector<
S1 & S2 & S3 & S4,
T,
(res1: R1, res2: R2, res3: R3, res4: R4) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
P1,
P2,
P3,
P4,
R1,
R2,
R3,
R4,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4,
P1 & P2 & P3 & P4,
T,
(res1: R1, res2: R2, res3: R3, res4: R4) => T
>
/* five selector */
export function createSelector<S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
P1,
P2,
P3,
P4,
P5,
R1,
R2,
R3,
R4,
R5,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5,
P1 & P2 & P3 & P4 & P5,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
>
/* six selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
R1,
R2,
R3,
R4,
R5,
R6,
T
>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
selector6: Selector<S6, R6>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
P1,
P2,
P3,
P4,
P5,
P6,
R1,
R2,
R3,
R4,
R5,
R6,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
selector6: ParametricSelector<S6, P6, R6>,
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6,
P1 & P2 & P3 & P4 & P5 & P6,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
/* seven selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
T
>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
selector6: Selector<S6, R6>,
selector7: Selector<S7, R7>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7
) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
selector6: ParametricSelector<S6, P6, R6>,
selector7: ParametricSelector<S7, P7, R7>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7
) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7,
P1 & P2 & P3 & P4 & P5 & P6 & P7,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T
>
/* eight selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
T
>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
selector6: Selector<S6, R6>,
selector7: Selector<S7, R7>,
selector8: Selector<S8, R8>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
P8,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
selector6: ParametricSelector<S6, P6, R6>,
selector7: ParametricSelector<S7, P7, R7>,
selector8: ParametricSelector<S8, P8, R8>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8,
P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8
) => T
>
/* nine selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
T
>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
selector6: Selector<S6, R6>,
selector7: Selector<S7, R7>,
selector8: Selector<S8, R8>,
selector9: Selector<S9, R9>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
P8,
P9,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
selector6: ParametricSelector<S6, P6, R6>,
selector7: ParametricSelector<S7, P7, R7>,
selector8: ParametricSelector<S8, P8, R8>,
selector9: ParametricSelector<S9, P9, R9>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9,
P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9
) => T
>
/* ten selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
T
>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
selector6: Selector<S6, R6>,
selector7: Selector<S7, R7>,
selector8: Selector<S8, R8>,
selector9: Selector<S9, R9>,
selector10: Selector<S10, R10>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
P8,
P9,
P10,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
selector6: ParametricSelector<S6, P6, R6>,
selector7: ParametricSelector<S7, P7, R7>,
selector8: ParametricSelector<S8, P8, R8>,
selector9: ParametricSelector<S9, P9, R9>,
selector10: ParametricSelector<S10, P10, R10>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10,
P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10
) => T
>
/* eleven selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
S11,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
T
>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
selector6: Selector<S6, R6>,
selector7: Selector<S7, R7>,
selector8: Selector<S8, R8>,
selector9: Selector<S9, R9>,
selector10: Selector<S10, R10>,
selector11: Selector<S11, R11>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
S11,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
P8,
P9,
P10,
P11,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
selector6: ParametricSelector<S6, P6, R6>,
selector7: ParametricSelector<S7, P7, R7>,
selector8: ParametricSelector<S8, P8, R8>,
selector9: ParametricSelector<S9, P9, R9>,
selector10: ParametricSelector<S10, P10, R10>,
selector11: ParametricSelector<S11, P11, R11>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11,
P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10 & P11,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11
) => T
>
/* twelve selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
S11,
S12,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
R12,
T
>(
selector1: Selector<S1, R1>,
selector2: Selector<S2, R2>,
selector3: Selector<S3, R3>,
selector4: Selector<S4, R4>,
selector5: Selector<S5, R5>,
selector6: Selector<S6, R6>,
selector7: Selector<S7, R7>,
selector8: Selector<S8, R8>,
selector9: Selector<S9, R9>,
selector10: Selector<S10, R10>,
selector11: Selector<S11, R11>,
selector12: Selector<S12, R12>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11 & S12,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
S11,
S12,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
P8,
P9,
P10,
P11,
P12,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
R12,
T
>(
selector1: ParametricSelector<S1, P1, R1>,
selector2: ParametricSelector<S2, P2, R2>,
selector3: ParametricSelector<S3, P3, R3>,
selector4: ParametricSelector<S4, P4, R4>,
selector5: ParametricSelector<S5, P5, R5>,
selector6: ParametricSelector<S6, P6, R6>,
selector7: ParametricSelector<S7, P7, R7>,
selector8: ParametricSelector<S8, P8, R8>,
selector9: ParametricSelector<S9, P9, R9>,
selector10: ParametricSelector<S10, P10, R10>,
selector11: ParametricSelector<S11, P11, R11>,
selector12: ParametricSelector<S12, P12, R12>,
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11 & S12,
P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10 & P11 & P12,
T,
(
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7,
res8: R8,
res9: R9,
res10: R10,
res11: R11,
res12: R12
) => T
>
/* array argument */
/* one selector */
export function createSelector<S1, R1, T>(
selectors: [Selector<S1, R1>],
combiner: (res1: R1) => T
): OutputSelector<S1, T, (res1: R1) => T>
export function createSelector<S1, P1, R1, T>(
selectors: [ParametricSelector<S1, P1, R1>],
combiner: (res1: R1) => T
): OutputParametricSelector<S1, P1, T, (res1: R1) => T>
/* two selector */
export function createSelector<S1, S2, R1, R2, T>(
selectors: [Selector<S1, R1>, Selector<S2, R2>],
combiner: (res1: R1, res2: R2) => T
): OutputSelector<S1 & S2, T, (res1: R1, res2: R2) => T>
export function createSelector<S1, S2, P1, P2, R1, R2, T>(
selectors: [ParametricSelector<S1, P1, R1>, ParametricSelector<S2, P2, R2>],
combiner: (res1: R1, res2: R2) => T
): OutputParametricSelector<S1 & S2, P1 & P2, T, (res1: R1, res2: R2) => T>
/* three selector */
export function createSelector<S1, S2, S3, R1, R2, R3, T>(
selectors: [Selector<S1, R1>, Selector<S2, R2>, Selector<S3, R3>],
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputSelector<S1 & S2 & S3, T, (res1: R1, res2: R2, res3: R3) => T>
export function createSelector<S1, S2, S3, P1, P2, P3, R1, R2, R3, T>(
selectors: [
ParametricSelector<S1, P1, R1>,
ParametricSelector<S2, P2, R2>,
ParametricSelector<S3, P3, R3>
],
combiner: (res1: R1, res2: R2, res3: R3) => T
): OutputParametricSelector<
S1 & S2 & S3,
P1 & P2 & P3,
T,
(res1: R1, res2: R2, res3: R3) => T
>
/* four selector */
export function createSelector<S1, S2, S3, S4, R1, R2, R3, R4, T>(
selectors: [
Selector<S1, R1>,
Selector<S2, R2>,
Selector<S3, R3>,
Selector<S4, R4>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputSelector<
S1 & S2 & S3 & S4,
T,
(res1: R1, res2: R2, res3: R3, res4: R4) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
P1,
P2,
P3,
P4,
R1,
R2,
R3,
R4,
T
>(
selectors: [
ParametricSelector<S1, P1, R1>,
ParametricSelector<S2, P2, R2>,
ParametricSelector<S3, P3, R3>,
ParametricSelector<S4, P4, R4>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4,
P1 & P2 & P3 & P4,
T,
(res1: R1, res2: R2, res3: R3, res4: R4) => T
>
/* five selector */
export function createSelector<S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T>(
selectors: [
Selector<S1, R1>,
Selector<S2, R2>,
Selector<S3, R3>,
Selector<S4, R4>,
Selector<S5, R5>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
P1,
P2,
P3,
P4,
P5,
R1,
R2,
R3,
R4,
R5,
T
>(
selectors: [
ParametricSelector<S1, P1, R1>,
ParametricSelector<S2, P2, R2>,
ParametricSelector<S3, P3, R3>,
ParametricSelector<S4, P4, R4>,
ParametricSelector<S5, P5, R5>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5,
P1 & P2 & P3 & P4 & P5,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T
>
/* six selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
R1,
R2,
R3,
R4,
R5,
R6,
T
>(
selectors: [
Selector<S1, R1>,
Selector<S2, R2>,
Selector<S3, R3>,
Selector<S4, R4>,
Selector<S5, R5>,
Selector<S6, R6>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
P1,
P2,
P3,
P4,
P5,
P6,
R1,
R2,
R3,
R4,
R5,
R6,
T
>(
selectors: [
ParametricSelector<S1, P1, R1>,
ParametricSelector<S2, P2, R2>,
ParametricSelector<S3, P3, R3>,
ParametricSelector<S4, P4, R4>,
ParametricSelector<S5, P5, R5>,
ParametricSelector<S6, P6, R6>
],
combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
): OutputParametricSelector<
S1 & S2 & S3 & S4 & S5 & S6,
P1 & P2 & P3 & P4 & P5 & P6,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T
>
/* seven selector */
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
T
>(
selectors: [
Selector<S1, R1>,
Selector<S2, R2>,
Selector<S3, R3>,
Selector<S4, R4>,
Selector<S5, R5>,
Selector<S6, R6>,
Selector<S7, R7>
],
combiner: (
res1: R1,
res2: R2,
res3: R3,
res4: R4,
res5: R5,
res6: R6,
res7: R7
) => T
): OutputSelector<
S1 & S2 & S3 & S4 & S5 & S6 & S7,
T,
(res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T
>
export function createSelector<
S1,
S2,
S3,
S4,
S5,
S6,
S7,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
T
>(
selectors: [
ParametricSelector<S1, P1, R1>,
ParametricSelector<S2, P2, R2>,
ParametricSelector<S3, P3, R3>,
Parametric