UNPKG

deox

Version:

Functional Type-safe Flux Standard Utilities

40 lines (39 loc) 1.81 kB
import { Action, AnyAction } from './create-action'; export declare type ExactActionCreator<TType extends string, TCallable extends <_T>(...args: any[]) => Action<TType>> = TCallable & { type: TType extends AnyAction ? TType['type'] : TType; toString(): TType extends AnyAction ? TType['type'] : TType; }; export declare type ActionCreator<T extends AnyAction | string> = { (...args: any[]): T extends string ? Action<T> : T; type: T extends AnyAction ? T['type'] : T; toString(): T extends AnyAction ? T['type'] : T; }; export declare type Executor<TType extends string, TCallable extends <_T>(...args: any[]) => Action<TType>> = (resolve: <Payload = undefined, Meta = undefined>(payload?: Payload, meta?: Meta) => Action<TType, Payload, Meta>) => TCallable; /** * Flux standard action creator factory * @example * createActionCreator('[Todo] truncate'); * @example * createActionCreator( * '[Todo] fetch rejected', * resolve => (error: Error) => resolve(error) * ); * @example * createActionCreator( * '[Todo] fetch rejected', * resolve => (error: Error, meta?: { status: number }) => resolve(error, meta) * ) * @example * createActionCreator( * '[Todo] add', * resolve => (name: string, completed = false) => resolve({ name, completed }) * ) * @example * createActionCreator( * '[Todo] add', * resolve => (name: string, completed = false) => resolve({ name, completed }, 'Meta data of all todos') * ) * */ export declare function createActionCreator<TType extends string>(type: TType): ExactActionCreator<TType, () => Action<TType>>; export declare function createActionCreator<TType extends string, TCallable extends <_T>(...args: any[]) => Action<TType>>(type: TType, executor: Executor<TType, TCallable>): ExactActionCreator<TType, TCallable>;