import type { Selector } from 'reselect'; export type CreateSelectorFunction = >, const Combiner extends (...args: readonly [...ReturnTypes, ...Args]) => any>(...items: [...Selectors, Combiner]) => (...args: Selectors['length'] extends 0 ? MergeParams, Parameters> : [StateFromSelectorList, ...MergeParams, Parameters>]) => ReturnType; type StateFromSelectorList = Selectors extends [f: infer F, ...other: infer R] ? StateFromSelector extends StateFromSelectorList ? StateFromSelector : StateFromSelectorList : {}; type StateFromSelector = T extends ((first: infer F, ...args: any[]) => any) ? F : never; type Fn = (...args: any[]) => any; type ReturnTypes = { [Index in keyof FunctionsArray]: FunctionsArray[Index] extends FunctionsArray[number] ? ReturnType : never }; type MergeParams = STypes['length'] extends 0 ? CTypes : MergeParams, DropFirst>; type DropFirst = T extends [any, ...infer Xs] ? Xs : []; export {};