From ad0d8406dc5b412119d6291d120ff86ccfc64569 Mon Sep 17 00:00:00 2001 From: Arya Emami Date: Tue, 24 Oct 2023 16:53:10 -0500 Subject: [PATCH] Fix type issues with lower TS versions --- src/types.ts | 77 ++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/src/types.ts b/src/types.ts index 267df3eb3..cf78afae9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -21,18 +21,20 @@ export type Selector< // The result will be inferred Result = unknown, // There are either 0 params, or N params - Params extends readonly any[] = any[] + Params extends never | readonly any[] = any[] // If there are 0 params, type the function as just State in, Result out. // Otherwise, type it as State + Params in, Result out. -> = - /** - * A function that takes a state and returns data that is based on that state. - * - * @param state - The first argument, often a Redux root state object. - * @param params - All additional arguments passed into the selector. - * @returns A derived value from the state. - */ - (state: State, ...params: FallbackIfNever) => Result +> = [Params] extends [never] + ? (state: State) => Result + : (state: State, ...params: Params) => Result +// /** +// * A function that takes a state and returns data that is based on that state. +// * +// * @param state - The first argument, often a Redux root state object. +// * @param params - All additional arguments passed into the selector. +// * @returns A derived value from the state. +// */ +// (state: State, ...params: FallbackIfNever) => Result /** * A function that takes input selectors' return values as arguments and returns a result. Otherwise known as `resultFunc`. @@ -64,8 +66,8 @@ export type Combiner = * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `defaultMemoize` or `weakMapMemoize`). If none is explicitly provided, `defaultMemoize` will be used. */ export interface OutputSelectorFields< - InputSelectors extends SelectorArray = SelectorArray, - Result = unknown, + InputSelectors extends SelectorArray, + Result, MemoizeFunction extends UnknownMemoizer = typeof defaultMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof defaultMemoize > extends Required< @@ -98,17 +100,22 @@ export interface OutputSelectorFields< * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `defaultMemoize` or `weakMapMemoize`). If none is explicitly provided, `defaultMemoize` will be used. */ export type OutputSelector< - InputSelectors extends SelectorArray = SelectorArray, - Result = unknown, + InputSelectors extends SelectorArray, + Result, MemoizeFunction extends UnknownMemoizer = typeof defaultMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof defaultMemoize -> = PrepareOutputSelector< - InputSelectors, +> = Selector< + GetStateFromSelectors, Result, - MemoizeFunction, - ArgsMemoizeFunction + GetParamsFromSelectors > & - ExtractMemoizerFields + ExtractMemoizerFields & + OutputSelectorFields< + InputSelectors, + Result, + MemoizeFunction, + ArgsMemoizeFunction + > /** * A helper type designed to optimize TypeScript performance by composing parts of {@linkcode OutputSelector | OutputSelector} in a more statically structured manner. @@ -130,22 +137,22 @@ export type OutputSelector< * * @see {@link https://github.com/microsoft/TypeScript/wiki/Performance#preferring-interfaces-over-intersections | Reference} */ -export interface PrepareOutputSelector< - InputSelectors extends SelectorArray = SelectorArray, - Result = unknown, - MemoizeFunction extends UnknownMemoizer = typeof defaultMemoize, - ArgsMemoizeFunction extends UnknownMemoizer = typeof defaultMemoize -> extends OutputSelectorFields< - InputSelectors, - Result, - MemoizeFunction, - ArgsMemoizeFunction - >, - Selector< - GetStateFromSelectors, - Result, - GetParamsFromSelectors - > {} +// export interface PrepareOutputSelector< +// InputSelectors extends SelectorArray = SelectorArray, +// Result = unknown, +// MemoizeFunction extends UnknownMemoizer = typeof defaultMemoize, +// ArgsMemoizeFunction extends UnknownMemoizer = typeof defaultMemoize +// > extends OutputSelectorFields< +// InputSelectors, +// Result, +// MemoizeFunction, +// ArgsMemoizeFunction +// >, +// Selector< +// GetStateFromSelectors, +// Result, +// GetParamsFromSelectors +// > {} /** * A selector that is assumed to have one additional argument, such as