Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correct typing of createStructuredSelector with multiple sub-selectors #446

Closed
dfsa-bot opened this issue Feb 27, 2020 · 9 comments
Closed
Milestone

Comments

@dfsa-bot
Copy link

dfsa-bot commented Feb 27, 2020

Hey, it's more like 'help wanted' type of issue as I could not find any information on how to actually do the thing. How do I correctly set type definitions on the following createSelector methods so my custom selector made with createStructuredSelector compiles without errors?

import { createSelector } from '@reduxjs/toolkit'
import { createStructuredSelector } from 'reselect'
import { RootState } from '../../../store/reducer'

const getLanguage = ({ 'language@header': language }: RootState) => language

const getProps = (_, ownLang): string => ownLang

const getLang = createSelector(
  getLanguage,
  ({ lang }) => lang
)

export const getIsLangActive = createSelector(
  getLang,
  getProps,
  (lang, ownLang) => lang === ownLang
)

export const makeGetIsActive = (...args: any) => createStructuredSelector({
  Error >>>>> isActive: getIsLangActive
})

The error is fairly long:

No overload matches this call.
  Overload 1 of 2, '(selectors: { isActive: Selector<unknown, boolean>; }, selectorCreator?: { <S, R1, T>(selector: Selector<S, R1>, combiner: (res: R1) => T): OutputSelector<S, T, (res: R1) => T>; <S, P, R1, T>(selector: ParametricSelector<...>, combiner: (res: R1) => T): OutputParametricSelector<...>; <S, R1, R2, T>(selector1: Selector<...>, selector2: Selector<...>, combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S, P, R1, R2, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S, R1, R2, R3, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S, P, R1, R2, R3, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, 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, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, selector12: Selector<...>, 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, selector12: ParametricSelector<...>, 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, R1, T>(selectors: [...], combiner: (res: R1) => T): OutputSelector<...>; <S, P, R1, T>(selectors: [...], combiner: (res: R1) => T): OutputParametricSelector<...>; <S, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S, P, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S, P, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selectors: [...], 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selectors: [...], 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, R1, T>(selector1: Selector<...>, combiner: (res1: R1) => T): OutputSelector<...>; <S1, P1, R1, T>(selector1: ParametricSelector<...>, combiner: (res1: R1) => T): OutputParametricSelector<...>; <S1, S2, R1, R2, T>(selector1: Selector<...>, selector2: Selector<...>, combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S1, S2, P1, P2, R1, R2, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S1, S2, S3, R1, R2, R3, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S1, S2, S3, P1, P2, P3, R1, R2, R3, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, R1, R2, R3, R4, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S1, S2, S3, S4, P1, P2, P3, P4, R1, R2, R3, R4, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, P1, P2, P3, P4, P5, R1, R2, R3, R4, R5, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, R1, R2, R3, R4, R5, R6, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, P1, P2, P3, P4, P5, P6, R1, R2, R3, R4, R5, R6, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, R1, R2, R3, R4, R5, R6, R7, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, S7, P1, P2, P3, P4, P5, P6, P7, R1, R2, R3, R4, R5, R6, R7, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, S8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, 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, P1, P2, P3, P4, P5, P6, P7, P8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, 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, S9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, 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, S10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, 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, S11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, 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, 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<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, 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, S12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, selector12: Selector<...>, 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, 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<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, selector12: ParametricSelector<...>, 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, R1, T>(selectors: [...], combiner: (res1: R1) => T): OutputSelector<...>; <S1, P1, R1, T>(selectors: [...], combiner: (res1: R1) => T): OutputParametricSelector<...>; <S1, S2, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S1, S2, P1, P2, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S1, S2, S3, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S1, S2, S3, P1, P2, P3, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S1, S2, S3, S4, P1, P2, P3, P4, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, P1, P2, P3, P4, P5, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, P1, P2, P3, P4, P5, P6, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, S7, P1, P2, P3, P4, P5, P6, P7, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, S8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], 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, S9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], 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, S10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], 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, S11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, S12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selectors: [...], 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, 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>(selectors: [...], 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, R, T>(selectors: Selector<...>[], combiner: (...res: R[]) => T): OutputSelector<...>; <S, P, R, T>(selectors: ParametricSelector<...>[], combiner: (...res: R[]) => T): OutputParametricSelector<...>; } | undefined): Selector<...>', gave the following error.
    Type 'OutputParametricSelector<CombinedState<{ 'balance@header': BalanceState; 'language@header': LanguageState; 'user@header': UserState; }>, any, boolean, (res1: string, res2: string) => boolean>' is not assignable to type 'Selector<unknown, boolean>'.
  Overload 2 of 2, '(selectors: { isActive: ParametricSelector<unknown, unknown, boolean>; }, selectorCreator?: { <S, R1, T>(selector: Selector<S, R1>, combiner: (res: R1) => T): OutputSelector<S, T, (res: R1) => T>; <S, P, R1, T>(selector: ParametricSelector<...>, combiner: (res: R1) => T): OutputParametricSelector<...>; <S, R1, R2, T>(selector1: Selector<...>, selector2: Selector<...>, combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S, P, R1, R2, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S, R1, R2, R3, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S, P, R1, R2, R3, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, 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, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, selector12: Selector<...>, 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, selector12: ParametricSelector<...>, 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, R1, T>(selectors: [...], combiner: (res: R1) => T): OutputSelector<...>; <S, P, R1, T>(selectors: [...], combiner: (res: R1) => T): OutputParametricSelector<...>; <S, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S, P, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S, P, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputSelector<...>; <S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10) => T): OutputParametricSelector<...>; <S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selectors: [...], 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, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selectors: [...], 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, R1, T>(selector1: Selector<...>, combiner: (res1: R1) => T): OutputSelector<...>; <S1, P1, R1, T>(selector1: ParametricSelector<...>, combiner: (res1: R1) => T): OutputParametricSelector<...>; <S1, S2, R1, R2, T>(selector1: Selector<...>, selector2: Selector<...>, combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S1, S2, P1, P2, R1, R2, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S1, S2, S3, R1, R2, R3, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S1, S2, S3, P1, P2, P3, R1, R2, R3, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, R1, R2, R3, R4, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S1, S2, S3, S4, P1, P2, P3, P4, R1, R2, R3, R4, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, P1, P2, P3, P4, P5, R1, R2, R3, R4, R5, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, R1, R2, R3, R4, R5, R6, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, P1, P2, P3, P4, P5, P6, R1, R2, R3, R4, R5, R6, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, R1, R2, R3, R4, R5, R6, R7, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, S7, P1, P2, P3, P4, P5, P6, P7, R1, R2, R3, R4, R5, R6, R7, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, S8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, 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, P1, P2, P3, P4, P5, P6, P7, P8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, 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, S9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, 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, S10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selector1: ParametricSelector<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, 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, S11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, 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, 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<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, 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, S12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selector1: Selector<...>, selector2: Selector<...>, selector3: Selector<...>, selector4: Selector<...>, selector5: Selector<...>, selector6: Selector<...>, selector7: Selector<...>, selector8: Selector<...>, selector9: Selector<...>, selector10: Selector<...>, selector11: Selector<...>, selector12: Selector<...>, 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, 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<...>, selector2: ParametricSelector<...>, selector3: ParametricSelector<...>, selector4: ParametricSelector<...>, selector5: ParametricSelector<...>, selector6: ParametricSelector<...>, selector7: ParametricSelector<...>, selector8: ParametricSelector<...>, selector9: ParametricSelector<...>, selector10: ParametricSelector<...>, selector11: ParametricSelector<...>, selector12: ParametricSelector<...>, 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, R1, T>(selectors: [...], combiner: (res1: R1) => T): OutputSelector<...>; <S1, P1, R1, T>(selectors: [...], combiner: (res1: R1) => T): OutputParametricSelector<...>; <S1, S2, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputSelector<...>; <S1, S2, P1, P2, R1, R2, T>(selectors: [...], combiner: (res1: R1, res2: R2) => T): OutputParametricSelector<...>; <S1, S2, S3, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputSelector<...>; <S1, S2, S3, P1, P2, P3, R1, R2, R3, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputSelector<...>; <S1, S2, S3, S4, P1, P2, P3, P4, R1, R2, R3, R4, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, P1, P2, P3, P4, P5, R1, R2, R3, R4, R5, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, P1, P2, P3, P4, P5, P6, R1, R2, R3, R4, R5, R6, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputSelector<...>; <S1, S2, S3, S4, S5, S6, S7, P1, P2, P3, P4, P5, P6, P7, R1, R2, R3, R4, R5, R6, R7, T>(selectors: [...], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T): OutputParametricSelector<...>; <S1, S2, S3, S4, S5, S6, S7, S8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, R1, R2, R3, R4, R5, R6, R7, R8, T>(selectors: [...], 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, S9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T>(selectors: [...], 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, S10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T>(selectors: [...], 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, S11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T>(selectors: [...], 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, S12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T>(selectors: [...], 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, 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>(selectors: [...], 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, R, T>(selectors: Selector<...>[], combiner: (...res: R[]) => T): OutputSelector<...>; <S, P, R, T>(selectors: ParametricSelector<...>[], combiner: (...res: R[]) => T): OutputParametricSelector<...>; } | undefined): ParametricSelector<...>', gave the following error.
    Type 'OutputParametricSelector<CombinedState<{ 'balance@header': BalanceState; 'language@header': LanguageState; 'user@header': UserState; }>, any, boolean, (res1: string, res2: string) => boolean>' is not assignable to type 'ParametricSelector<unknown, unknown, boolean>'.
      Types of parameters 'state' and 'state' are incompatible.
        Type 'unknown' is not assignable to type 'CombinedState<{ 'balance@header': BalanceState; 'language@header': LanguageState; 'user@header': UserState; }>'.
          Type 'unknown' is not assignable to type '{ readonly [$CombinedState]?: undefined; }'.  TS2769

    29 | 
    30 | export const makeGetIsActive = () => createStructuredSelector({
  > 31 |   isActive: getIsLangActive
       |   ^
    32 | })
    33 | 

PS. Are there any public repos you might know where devs have used reselect+typescript combo?

@frankwallis
Copy link
Contributor

This looks to me to be broken with the latest version of typescript :/

@frankwallis
Copy link
Contributor

Actually I think this is resolved by setting

   "strictFunctionTypes": false,

in tsconfig.json

@alaboudi
Copy link

alaboudi commented Aug 7, 2020

I'm also experiencing issues with this function's typings. It doesn't work 😢

@arendjr
Copy link

arendjr commented Dec 7, 2020

It works for me, but I had to manually specify the types for the generics. If you want to be able to automatically derive these, please have a look at the snippet provided in #476. Hopefully this works for you as well.

@markerikson markerikson added this to the 4.1 milestone Oct 17, 2021
@markerikson
Copy link
Contributor

I just published https://github.com/reduxjs/reselect/releases/tag/v4.1.0-alpha.0 , which rewrites the types. If you're still around, could you try it out?

@markerikson
Copy link
Contributor

Should be fixed by #486 .

@frankwallis
Copy link
Contributor

Thanks, will check it out!

@gxpd-jjh
Copy link

gxpd-jjh commented Feb 20, 2023

@markerikson this is seemingly back with 4.1.7 and TypeScript 4.9.5. Did you want me to create a new issue?

error TS2345: Argument of type '(state: import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/types").Head<import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/versionedTypes/ts47-mergeParameters").MergePar...' is not assignable to parameter of type '(state: import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/types").Head<import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/versionedTypes/ts47-mergeParameters").MergePar...'.
  Types of parameters 'state' and 'state' are incompatible.
    Type '[state: import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/types").Head<import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/versionedTypes/ts47-mergeParameters").MergePar...' is not assignable to type '[state: import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/types").Head<import("/Users/jjH/Projects/product-configurator/product-configurator/node_modules/@reduxjs/toolkit/node_modules/reselect/es/versionedTypes/ts47-mergeParameters").MergePar...'. Two different types with this name exist, but they are unrelated.
      Source has 1 element(s) but target requires 2.


jjH@Jonathons-MBP product-configurator % npm list reselect
product-configurator@0.1.0 /Users/jjH/Projects/product-configurator/product-configurator
├─┬ @reduxjs/toolkit@1.9.2
│ └── reselect@4.1.7
└── reselect@4.1.7

jjH@Jonathons-MBP product-configurator % npm list typescript
product-configurator@0.1.0 /Users/jjH/Projects/product-configurator/product-configurator
└── typescript@4.9.5


@markerikson
Copy link
Contributor

@gxpd-jjh : that seems like a very different error than what's listed in this issue. (and tbh, I have no idea what that's even trying to say.)

Yeah, file it as a separate issue, although I'm not sure when I'll have time to look at it.

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

No branches or pull requests

6 participants