diff --git a/src/types.ts b/src/types.ts index 3bd3368..7978253 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,22 +11,26 @@ import { Action, AnyAction, Middleware, Dispatch } from 'redux' * thunks (if specified when setting up the Thunk middleware) * @template BasicAction The (non-thunk) actions that can be dispatched. */ -export interface ThunkDispatch - extends Dispatch { - // When the thunk middleware is added, `store.dispatch` now has three overloads: - - // 1) The base overload, which accepts a standard action object, and returns that action object +export interface ThunkDispatch< + State, + ExtraThunkArg, + BasicAction extends Action +> { + // When the thunk middleware is added, `store.dispatch` now has three overloads (NOTE: the order here matters for correct behavior and is very fragile - do not reorder these!): - // 2) The specific thunk function overload + // 1) The specific thunk function overload /** Accepts a thunk function, runs it, and returns whatever the thunk itself returns */ ( thunkAction: ThunkAction ): ReturnType - // 3) - /** A union of the other two overloads. This overload exists to work around a problem - * with TS inference ( see https://github.com/microsoft/TypeScript/issues/14107 ) - */ + // 2) The base overload. + /** Accepts a standard action object, and returns that action object */ + (action: Action): Action + + // 3) A union of the other two overloads. This overload exists to work around a problem + // with TS inference ( see https://github.com/microsoft/TypeScript/issues/14107 ) + /** A union of the other two overloads for TS inference purposes */ ( action: Action | ThunkAction ): Action | ReturnType