UNPKG

selectorator

Version:

Simplified generator of reselect selectors

42 lines (41 loc) 2 kB
import type { CreateSelectorOptions } from 'reselect'; import type { Path, ComputeValue, IdentitySelector, StandardSelector, PathStructured, ComputeStructuredValue, IdentityStructuredSelector } from './internalTypes.js'; /** * Create a selector without any boilerplate code * * @example * import { createSelector } from 'selectorator'; * * interface Item { * name: string; * value: number; * } * * interface State { * items: Item[]; * filter: { * value: string; * } * } * * const getFilteredItems = createSelector<State>()( * ['items', 'filter.value'], * (items, filterValue) => items.filter((item) => item.includes(filterValue)), * ); * * const state = { * items: ['foo', 'bar', 'foo-bar'], * filter: { * value: 'foo' * } * }; * * console.log(getFilteredItems(state)); // ['foo', 'foo-bar']; * console.log(getFilteredItems(state)); // ['foo', 'foo-bar'], pulled from cache; */ export declare function createSelector<Args>(options?: CreateSelectorOptions): { <const Paths extends [Path<Args extends unknown[] ? Args : [Args]>]>(paths: Paths, getComputedValue?: undefined): IdentitySelector<Args extends unknown[] ? Args : [Args], Paths>; <const Paths extends Array<Path<Args extends unknown[] ? Args : [Args]>>, GetComputedValue extends ComputeValue<Args extends unknown[] ? Args : [Args], Paths, any>>(paths: Paths, getComputedValue: GetComputedValue): StandardSelector<Args extends unknown[] ? Args : [Args], ReturnType<GetComputedValue>>; <const Paths extends PathStructured<Args extends unknown[] ? Args : [Args]>>(paths: Paths): IdentityStructuredSelector<Args extends unknown[] ? Args : [Args], Paths>; <const Paths extends PathStructured<Args extends unknown[] ? Args : [Args]>, GetComputedValue extends ComputeStructuredValue<Args extends unknown[] ? Args : [Args], Paths, any>>(paths: Paths, getComputedValue: GetComputedValue): StandardSelector<Args extends unknown[] ? Args : [Args], ReturnType<GetComputedValue>>; };