@mmuscat/angular-actions
Version:
A tiny (1kb) state management library for Angular Composition API.
22 lines (21 loc) • 1.01 kB
TypeScript
import { Value, ValueToken } from "@mmuscat/angular-composition-api";
import { ActionDispatcher } from "./action";
import { Observable } from "rxjs";
declare type ValueType<T> = T extends ValueToken<infer R> ? R : never;
export interface Reducer<T> {
reducers: [
ActionDispatcher<any, any> | ActionDispatcher<any, any>[],
StateReducer<any, any>
][];
add<U extends ValueToken<ActionDispatcher<any, any>>[]>(action: U, reduce: StateReducer<T, ValueType<U[number]> extends Observable<infer R> ? R : never>): Reducer<T>;
add<U extends ValueToken<ActionDispatcher<any, any>>>(action: U, reduce: StateReducer<T, ValueType<U> extends Observable<infer R> ? R : never>): Reducer<T>;
}
declare type ReducerFactory<T> = (reducer: Reducer<T>) => Reducer<T>;
interface ReducerStatic {
new <T>(name: string, factory?: ReducerFactory<T>): ValueToken<Value<T>>;
}
export interface StateReducer<T, U> {
(state: T, action: U): T;
}
export declare const Reducer: ReducerStatic;
export {};