selectorator
Version:
Simplified generator of reselect selectors
42 lines (41 loc) • 2 kB
TypeScript
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>>;
};