diff --git a/types/redux-promise-middleware/index.d.ts b/types/redux-promise-middleware/index.d.ts index 70eea32baa..52d41541cb 100644 --- a/types/redux-promise-middleware/index.d.ts +++ b/types/redux-promise-middleware/index.d.ts @@ -2,7 +2,23 @@ // Project: https://github.com/pburtchaell/redux-promise-middleware // Definitions by: ianks // Definitions: https://github.com/borisyankov/DefinitelyTyped +// TypeScript Version: 2.8 import { Middleware } from 'redux'; export default function promiseMiddleware(config?: { promiseTypeSuffixes?: string[], promiseTypeDelimiter?: string }): Middleware; + +declare module "redux" { + export interface PromiseAction extends Action { + payload: Promise; + } + + type PayloadType = PA extends PromiseAction ? R : never; + + export interface Dispatch { + >(action: PA): Promise<{ + value: PayloadType; + type: string; + }>; + } +} diff --git a/types/redux-promise-middleware/redux-promise-middleware-tests.ts b/types/redux-promise-middleware/redux-promise-middleware-tests.ts index 788a3faee3..eb9cc00603 100644 --- a/types/redux-promise-middleware/redux-promise-middleware-tests.ts +++ b/types/redux-promise-middleware/redux-promise-middleware-tests.ts @@ -2,7 +2,6 @@ import { createStore, applyMiddleware, Store, Dispatch } from "redux"; import promiseMiddleware from "redux-promise-middleware"; declare var rootReducer: (state: any, action: any) => any; -declare var Promise: any; declare var doSomethingAsyncAndReturnPromise: any; declare var someActionCreator: any; @@ -38,6 +37,8 @@ const actionCreator2 = () => ({ promise: Promise.resolve((action: string, dispatch: Dispatch, getState: Function) => { dispatch({ type: "SECEOND_ACTION_TYPE", payload: "..." }); dispatch(someActionCreator()); + dispatch({ type: "CHAINED_ACTION", payload: Promise.resolve("...") }) + .then(({ type, value }) => {}) }) } });