Skip to content

Commit

Permalink
feat: createStructuredSelector returns OutputSelector
Browse files Browse the repository at this point in the history
- update types for v4.1
  • Loading branch information
stropho committed Nov 4, 2021
1 parent a90a856 commit 7a5d024
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
14 changes: 11 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type {
Selector,
GetParamsFromSelectors,
OutputSelector,
OutputSelectorFields,
EqualityFn,
SelectorArray,
SelectorResultArray,
Expand Down Expand Up @@ -213,20 +214,27 @@ export interface StructuredSelectorCreator {
<SelectorMap extends SelectorsObject>(
selectorMap: SelectorMap,
selectorCreator?: CreateSelectorFunction<any, any, any>
): (
): ((
state: SelectorMap[keyof SelectorMap] extends (
state: infer State
) => unknown
? State
: never
) => {
[Key in keyof SelectorMap]: ReturnType<SelectorMap[Key]>
}
}) &
OutputSelectorFields<
typeof selectorCreator,
{
[Key in keyof SelectorMap]: ReturnType<SelectorMap[Key]>
}
>

<State, Result = State>(
selectors: { [K in keyof Result]: Selector<State, Result[K], never> },
selectorCreator?: CreateSelectorFunction<any, any, any>
): Selector<State, Result, never>
): Selector<State, Result, never> &
OutputSelectorFields<typeof selectorCreator, Result>
}

// Manual definition of state and output arguments
Expand Down
2 changes: 1 addition & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export type Selector<
: (state: State, ...params: Params) => Result

/** Selectors generated by Reselect have several additional fields attached: */
interface OutputSelectorFields<Combiner, Result> {
export interface OutputSelectorFields<Combiner, Result> {
/** The final function passed to `createSelector` */
resultFunc: Combiner
/** The same function, memoized */
Expand Down

0 comments on commit 7a5d024

Please sign in to comment.