Skip to content

Instantly share code, notes, and snippets.

@heyimalex
Last active May 22, 2017 12:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save heyimalex/c52b5779c01a2803e5f1f040b0088917 to your computer and use it in GitHub Desktop.
Save heyimalex/c52b5779c01a2803e5f1f040b0088917 to your computer and use it in GitHub Desktop.
reselect-map typescript types
function genSelectorType({ count, isParametric, isArraySelector }) {
const rmap = fn => {
const results = [];
for (let i = 2; i <= count; i++) {
results.push(fn(i));
}
return results;
};
const resultGenerics = rmap(i => `R${i}`);
const resultArgs = rmap(i => `res${i}: R${i}`);
const resultSelectors = isParametric
? rmap(i => `ParametricSelector<S, P, R${i}>`)
: rmap(i => `Selector<S, R${i}>`);
const namedResultSelectors = isParametric
? rmap(i => `selector${i}: ParametricSelector<S, P, R${i}>`)
: rmap(i => `selector${i}: Selector<S, R${i}>`);
const genericsCombined = isParametric
? ["S", "P", "E", ...resultGenerics, "T"].join(", ")
: ["S", "E", ...resultGenerics, "T"].join(", ");
const combinerT = isArraySelector
? `(${["elem: E", ...resultArgs].join(", ")}) => T`
: `(${["elem: E", ...resultArgs, "key: string"].join(", ")}) => T`;
const inputT = isArraySelector ? "E[]" : "{ [key: string]: E }";
const resultT = isArraySelector ? "T[]" : "{ [key: string]: T }";
const outputSelector = isParametric
? `OutputParametricSelector<S, P, ${resultT}, ${combinerT}>`
: `OutputSelector<S, ${resultT}, ${combinerT}>`;
const mappedSelectorT = isParametric
? `ParametricSelector<S, P, ${inputT}>`
: `Selector<S, ${inputT}>`;
const creatorFuncName = isArraySelector
? "createArraySelector"
: "createObjectSelector";
const final = `
export function ${creatorFuncName}<${genericsCombined}>(
${[`selector1: ${mappedSelectorT}`, ...namedResultSelectors, `combiner: ${combinerT}`].join(",\n ")},
): ${outputSelector};
export function ${creatorFuncName}<${genericsCombined}>(
selectors: [
${[mappedSelectorT, ...resultSelectors].join(",\n ")}
],
combiner: ${combinerT},
): ${outputSelector};`;
console.log(final);
}
function genSelectorTypeN(n) {
console.log(`/* ${n} selector${n == 1 ? '' : 's'} */`)
genSelectorType({
count: n,
isArraySelector: true,
isParametric: false
});
genSelectorType({
count: n,
isArraySelector: true,
isParametric: true
});
genSelectorType({
count: n,
isArraySelector: false,
isParametric: false
});
genSelectorType({
count: n,
isArraySelector: false,
isParametric: true
});
}
console.log(`
import {
Selector,
ParametricSelector,
OutputSelector,
OutputParametricSelector,
} from 'reselect';
`)
for (let i = 1; i <= 12; i++) {
genSelectorTypeN(i);
}
import {
Selector,
ParametricSelector,
OutputSelector,
OutputParametricSelector,
} from 'reselect';
/* 1 selector */
export function createArraySelector<S, E, T>(
selector1: Selector<S, E[]>,
combiner: (elem: E) => T,
): OutputSelector<S, T[], (elem: E) => T>;
export function createArraySelector<S, E, T>(
selectors: [
Selector<S, E[]>
],
combiner: (elem: E) => T,
): OutputSelector<S, T[], (elem: E) => T>;
export function createArraySelector<S, P, E, T>(
selector1: ParametricSelector<S, P, E[]>,
combiner: (elem: E) => T,
): OutputParametricSelector<S, P, T[], (elem: E) => T>;
export function createArraySelector<S, P, E, T>(
selectors: [
ParametricSelector<S, P, E[]>
],
combiner: (elem: E) => T,
): OutputParametricSelector<S, P, T[], (elem: E) => T>;
export function createObjectSelector<S, E, T>(
selector1: Selector<S, { [key: string]: E }>,
combiner: (elem: E, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, key: string) => T>;
export function createObjectSelector<S, E, T>(
selectors: [
Selector<S, { [key: string]: E }>
],
combiner: (elem: E, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, key: string) => T>;
export function createObjectSelector<S, P, E, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
combiner: (elem: E, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, key: string) => T>;
export function createObjectSelector<S, P, E, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>
],
combiner: (elem: E, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, key: string) => T>;
/* 2 selectors */
export function createArraySelector<S, E, R2, T>(
selector1: Selector<S, E[]>,
selector2: Selector<S, R2>,
combiner: (elem: E, res2: R2) => T,
): OutputSelector<S, T[], (elem: E, res2: R2) => T>;
export function createArraySelector<S, E, R2, T>(
selectors: [
Selector<S, E[]>,
Selector<S, R2>
],
combiner: (elem: E, res2: R2) => T,
): OutputSelector<S, T[], (elem: E, res2: R2) => T>;
export function createArraySelector<S, P, E, R2, T>(
selector1: ParametricSelector<S, P, E[]>,
selector2: ParametricSelector<S, P, R2>,
combiner: (elem: E, res2: R2) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2) => T>;
export function createArraySelector<S, P, E, R2, T>(
selectors: [
ParametricSelector<S, P, E[]>,
ParametricSelector<S, P, R2>
],
combiner: (elem: E, res2: R2) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2) => T>;
export function createObjectSelector<S, E, R2, T>(
selector1: Selector<S, { [key: string]: E }>,
selector2: Selector<S, R2>,
combiner: (elem: E, res2: R2, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, key: string) => T>;
export function createObjectSelector<S, E, R2, T>(
selectors: [
Selector<S, { [key: string]: E }>,
Selector<S, R2>
],
combiner: (elem: E, res2: R2, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, key: string) => T>;
export function createObjectSelector<S, P, E, R2, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
selector2: ParametricSelector<S, P, R2>,
combiner: (elem: E, res2: R2, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, key: string) => T>;
export function createObjectSelector<S, P, E, R2, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
ParametricSelector<S, P, R2>
],
combiner: (elem: E, res2: R2, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, key: string) => T>;
/* 3 selectors */
export function createArraySelector<S, E, R2, R3, T>(
selector1: Selector<S, E[]>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
combiner: (elem: E, res2: R2, res3: R3) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3) => T>;
export function createArraySelector<S, E, R2, R3, T>(
selectors: [
Selector<S, E[]>,
Selector<S, R2>,
Selector<S, R3>
],
combiner: (elem: E, res2: R2, res3: R3) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3) => T>;
export function createArraySelector<S, P, E, R2, R3, T>(
selector1: ParametricSelector<S, P, E[]>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
combiner: (elem: E, res2: R2, res3: R3) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3) => T>;
export function createArraySelector<S, P, E, R2, R3, T>(
selectors: [
ParametricSelector<S, P, E[]>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>
],
combiner: (elem: E, res2: R2, res3: R3) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3) => T>;
export function createObjectSelector<S, E, R2, R3, T>(
selector1: Selector<S, { [key: string]: E }>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
combiner: (elem: E, res2: R2, res3: R3, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, T>(
selectors: [
Selector<S, { [key: string]: E }>,
Selector<S, R2>,
Selector<S, R3>
],
combiner: (elem: E, res2: R2, res3: R3, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
combiner: (elem: E, res2: R2, res3: R3, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>
],
combiner: (elem: E, res2: R2, res3: R3, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, key: string) => T>;
/* 4 selectors */
export function createArraySelector<S, E, R2, R3, R4, T>(
selector1: Selector<S, E[]>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4) => T>;
export function createArraySelector<S, E, R2, R3, R4, T>(
selectors: [
Selector<S, E[]>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, T>(
selector1: ParametricSelector<S, P, E[]>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, T>(
selectors: [
ParametricSelector<S, P, E[]>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4) => T>;
export function createObjectSelector<S, E, R2, R3, R4, T>(
selector1: Selector<S, { [key: string]: E }>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, T>(
selectors: [
Selector<S, { [key: string]: E }>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, key: string) => T>;
/* 5 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, T>(
selector1: Selector<S, E[]>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T>;
export function createArraySelector<S, E, R2, R3, R4, R5, T>(
selectors: [
Selector<S, E[]>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, T>(
selector1: ParametricSelector<S, P, E[]>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, T>(
selectors: [
ParametricSelector<S, P, E[]>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, T>(
selector1: Selector<S, { [key: string]: E }>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, T>(
selectors: [
Selector<S, { [key: string]: E }>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
selector2: ParametricSelector<S, P, R2>,
selector3: ParametricSelector<S, P, R3>,
selector4: ParametricSelector<S, P, R4>,
selector5: ParametricSelector<S, P, R5>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, key: string) => T>;
/* 6 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, R6, T>(
selector1: Selector<S, E[]>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T>;
export function createArraySelector<S, E, R2, R3, R4, R5, R6, T>(
selectors: [
Selector<S, E[]>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, T>(
selector1: ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, T>(
selectors: [
ParametricSelector<S, P, E[]>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, T>(
selector1: Selector<S, { [key: string]: E }>,
selector2: Selector<S, R2>,
selector3: Selector<S, R3>,
selector4: Selector<S, R4>,
selector5: Selector<S, R5>,
selector6: Selector<S, R6>,
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, T>(
selectors: [
Selector<S, { [key: string]: E }>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
ParametricSelector<S, P, R2>,
ParametricSelector<S, P, R3>,
ParametricSelector<S, P, R4>,
ParametricSelector<S, P, R5>,
ParametricSelector<S, P, R6>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, key: string) => T>;
/* 7 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, T>(
selector1: Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T>;
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, T>(
selectors: [
Selector<S, E[]>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, T>(
selector1: ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, T>(
selectors: [
ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, T>(
selector1: Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, T>(
selectors: [
Selector<S, { [key: string]: E }>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, key: string) => T>;
/* 8 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, T>(
selector1: Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T>;
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, T>(
selectors: [
Selector<S, E[]>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>,
Selector<S, R8>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, T>(
selector1: ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, T>(
selectors: [
ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, T>(
selector1: Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, T>(
selectors: [
Selector<S, { [key: string]: E }>,
Selector<S, R2>,
Selector<S, R3>,
Selector<S, R4>,
Selector<S, R5>,
Selector<S, R6>,
Selector<S, R7>,
Selector<S, R8>
],
combiner: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, key: string) => T>;
/* 9 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selector1: Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T>;
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selectors: [
Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selector1: ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selectors: [
ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selector1: Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selectors: [
Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, key: string) => T>;
/* 10 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selector1: Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T>;
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selectors: [
Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selector1: ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selectors: [
ParametricSelector<S, P, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T,
): OutputParametricSelector<S, P, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selector1: Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selectors: [
Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, key: string) => T>;
/* 11 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selector1: Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T>;
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selectors: [
Selector<S, E[]>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T,
): OutputSelector<S, T[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selector1: ParametricSelector<S, P, E[]>,
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: (elem: E, 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[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T>;
export function createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selectors: [
ParametricSelector<S, P, E[]>,
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: (elem: E, 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[], (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selector1: Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selectors: [
Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, key: string) => T>;
/* 12 selectors */
export function createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selector1: Selector<S, E[]>,
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: (elem: E, 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[], (elem: E, 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 createArraySelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selectors: [
Selector<S, E[]>,
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: (elem: E, 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[], (elem: E, 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 createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selector1: ParametricSelector<S, P, E[]>,
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: (elem: E, 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[], (elem: E, 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 createArraySelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selectors: [
ParametricSelector<S, P, E[]>,
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: (elem: E, 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[], (elem: E, 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 createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selector1: Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T>;
export function createObjectSelector<S, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selectors: [
Selector<S, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T,
): OutputSelector<S, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selector1: ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T>;
export function createObjectSelector<S, P, E, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(
selectors: [
ParametricSelector<S, P, { [key: string]: E }>,
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: (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T,
): OutputParametricSelector<S, P, { [key: string]: T }, (elem: E, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12, key: string) => T>;
@markwhitfeld
Copy link

Wow! Well done! That looks about right.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment