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
TypeScript
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[];
}