UNPKG

reducer-class

Version:

Boilerplate free class-based reducer creator. Built with TypeScript. Works with Redux and NGRX. Has integration with immer.

27 lines (26 loc) 1.41 kB
import { DeepReadonlyArray, DeepReadonlyObject } from 'typelevel-ts'; export declare type Immutable<T> = T extends object ? DeepReadonlyObject<T> : T extends any[] ? DeepReadonlyArray<T> : T; export interface IReducerMap<T> { [actionType: string]: (state: T, action: any) => T; } export interface IReducerClassConstraintComplete<T> { [index: string]: ReducerClassMethod<T> | T; } export declare type ReducerPure<T> = (state: T, action: any) => T; export declare type ReducerImmer<T> = (original: T, draft: T, action: any) => undefined; export declare type ReducerClassMethod<T> = ReducerPure<T> | ReducerImmer<T>; export interface IReducerClassConstraint<T> { [methodName: string]: ReducerClassMethod<T>; } export interface IReducerClassMethodWithActionType<T> { method: ReducerPure<T>; actionType: string; } export declare class ReducerClassHelpers { typeGuardReducerPure<T>(method: ReducerClassMethod<T>): method is ReducerPure<T>; addImmerIfNeeded<T>(method: ReducerClassMethod<T>): ReducerPure<T>; getReducerClassMethodsWthActionTypes<T>(instance: IReducerClassConstraint<T>, keys: Array<keyof typeof instance>): IReducerClassMethodWithActionType<any>[]; mergeReducers<T>(...reducers: Array<ReducerPure<T>>): ReducerPure<T>; getReducerMap<T>(data: Array<IReducerClassMethodWithActionType<T>>): IReducerMap<T>; getClassInstanceMethodNames(obj: object): string[]; }