deox
Version:
Functional Type-safe Flux Standard Utilities
40 lines (39 loc) • 1.81 kB
TypeScript
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>;