UNPKG

redux-actions-promise-wrapper

Version:

Type safe wrapper for redux actions (compatible with redux-saga)

47 lines (46 loc) 1.92 kB
/** * Omit field of mapped type by value */ export declare type OmitByValue<O extends object, V> = Pick<O, ({ [P in keyof O]: O[P] extends V ? never : P; })[keyof O]>; /** * Action with promise */ export declare type Action<T extends string = string, P = undefined, R = undefined> = Readonly<{ type: T; payload: P; promise: Promise<R>; resolve: (value: R) => void; reject: (reason?: any) => void; }>; /** * return type of generator function * @note * type Returnable<T> = { __returnedType?: T }; // * use this if dont need to check string and number literals */ export declare type GReturnable<T> = { __returnedType?: T; } & T; /** * Obtain return type of GeneratorFunction * @example * (...args: any[]) => IterableIterator<string | number | GReturnable<boolean>> * would have type boolean; */ export declare type GReturn<T> = T extends (...args: any) => IterableIterator<any> ? GeneratorReturnStrict<T> : undefined; declare type GeneratorReturnStrict<T extends (...args: any) => IterableIterator<any>> = ReturnType<T> extends IterableIterator<infer I> ? NonNullable<Extract<I, GReturnable<unknown>>['__returnedType']> extends never ? undefined : NonNullable<Extract<I, GReturnable<unknown>>['__returnedType']> : never; /** * Obtain return type of IterableIterator (returned from Generator Function) * @example * IterableIterator<string | number | GReturnable<boolean>> -> boolean * IterableIterator<string | number> -> undefined */ export declare type IIReturn<T> = IterableIteratorReturn<T> extends never ? undefined : IterableIteratorReturn<T>; declare type IterableIteratorReturn<T> = NonNullable<Extract<T, GReturnable<unknown>>['__returnedType']>; /** * Returned Promise Resolver * Get resolve type of Promise returned by a function */ export declare type rpResolve<T extends (...args: any[]) => any> = ReturnType<T> extends Promise<infer U> ? U : T; export {};