Skip to content

createSelector can't handle generic state #571

Open
@Fiurgeist

Description

@Fiurgeist

I need a generic here, since I have shared functions that are used in several Apps with different RootStates.
I boiled it down to:

import { createSelector, Selector } from "reselect";

export const createBarSelector = <S>(
  getFoo: Selector<S, number, never>
): Selector<S, string, never> => createSelector(getFoo, (_foo) => "bar");

This works up until version 4.1.2. From 4.1.3 onwards the following TypeScript error happens:

(alias) createSelector<[(state: S) => string], string>(items_0: (state: S) => string, items_1: (args_0: string) => string): ((state: IgnoreInvalidIntersections<IfJustNullish<S, unknown, S>> extends IgnoreInvalidIntersections<...> ? Expand<...> : never) => string) & OutputSelectorFields<...> & {
...;
} (+2 overloads)
import createSelector

Input selectors as separate inline arguments

Type '((state: IgnoreInvalidIntersections<IfJustNullish<S, unknown, S>> extends IgnoreInvalidIntersections<IfJustNullish<S, unknown, S>> ? Expand<...> : never) => string) & OutputSelectorFields<...> & { ...; }' is not assignable to type '(state: S) => string'.
Types of parameters 'state' and 'state' are incompatible.
Type 'S' is not assignable to type 'IgnoreInvalidIntersections<IfJustNullish<S, unknown, S>> extends IgnoreInvalidIntersections<IfJustNullish<S, unknown, S>> ? Expand<...> : never'.ts(2322)

Versions

TS: 4.6.2
Reselect: 4.1.5

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions