pretur.redux
Version:
24 lines (23 loc) • 937 B
TypeScript
import { Action } from './action';
export interface Reducer<T> {
(state: T | undefined, action: Action<any, any>): T;
}
export declare type Reducible<T extends Reducible<any>> = T & {
reduce(action: Action<any, any>): Reducible<T>;
};
export declare type Reducibles<T extends object = any> = {
[P in keyof T]: Reducible<T[P]>;
};
export interface ParametricReducibleFactory<D, T extends Reducibles> {
data: D;
type: T & Reducible<T>;
buildReducer: (data: D) => Reducer<T>;
(data: D): T & Reducible<T>;
}
export interface ReducibleFactory<T extends Reducibles> {
type: Reducible<T>;
buildReducer: () => Reducer<T>;
(): Reducible<T>;
}
export declare function buildReducibleFactory<T extends Reducibles = object>(builder: () => T): ReducibleFactory<T>;
export declare function buildReducibleFactory<D = any, T extends Reducibles = object>(builder: (data: D) => T): ParametricReducibleFactory<D, T>;