diff --git a/src/connect/mapDispatchToProps.js b/src/connect/mapDispatchToProps.ts similarity index 58% rename from src/connect/mapDispatchToProps.js rename to src/connect/mapDispatchToProps.ts index ee393abff..aee587812 100644 --- a/src/connect/mapDispatchToProps.js +++ b/src/connect/mapDispatchToProps.ts @@ -1,21 +1,29 @@ +import { ActionCreatorsMapObject, Dispatch } from 'redux' +import { FixTypeLater } from '../types' import bindActionCreators from '../utils/bindActionCreators' import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps' -export function whenMapDispatchToPropsIsFunction(mapDispatchToProps) { +export function whenMapDispatchToPropsIsFunction( + mapDispatchToProps: ActionCreatorsMapObject | FixTypeLater +) { return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined } -export function whenMapDispatchToPropsIsMissing(mapDispatchToProps) { +export function whenMapDispatchToPropsIsMissing(mapDispatchToProps: undefined) { return !mapDispatchToProps - ? wrapMapToPropsConstant((dispatch) => ({ dispatch })) + ? wrapMapToPropsConstant((dispatch: Dispatch) => ({ + dispatch, + })) : undefined } -export function whenMapDispatchToPropsIsObject(mapDispatchToProps) { +export function whenMapDispatchToPropsIsObject( + mapDispatchToProps: ActionCreatorsMapObject +) { return mapDispatchToProps && typeof mapDispatchToProps === 'object' - ? wrapMapToPropsConstant((dispatch) => + ? wrapMapToPropsConstant((dispatch: Dispatch) => bindActionCreators(mapDispatchToProps, dispatch) ) : undefined diff --git a/src/connect/wrapMapToProps.ts b/src/connect/wrapMapToProps.ts index bb11089dc..be02a4918 100644 --- a/src/connect/wrapMapToProps.ts +++ b/src/connect/wrapMapToProps.ts @@ -1,4 +1,4 @@ -import { Dispatch } from 'redux' +import { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux' import { FixTypeLater } from '../types' import verifyPlainObject from '../utils/verifyPlainObject' @@ -20,7 +20,13 @@ export function wrapMapToPropsConstant( // could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing) // and a state object in some others (ex: whenMapStateToPropsIsMissing) // eslint-disable-next-line no-unused-vars - getConstant: (dispatch: Dispatch) => { dispatch?: Dispatch } + getConstant: (dispatch: Dispatch) => + | { + dispatch?: Dispatch + dependsOnOwnProps?: boolean + } + | ActionCreatorsMapObject + | ActionCreator ) { return function initConstantSelector(dispatch: Dispatch) { const constant = getConstant(dispatch) diff --git a/src/utils/bindActionCreators.ts b/src/utils/bindActionCreators.ts index 1e0fa9a34..fa50581bc 100644 --- a/src/utils/bindActionCreators.ts +++ b/src/utils/bindActionCreators.ts @@ -3,8 +3,9 @@ import { ActionCreatorsMapObject, Dispatch } from 'redux' export default function bindActionCreators( actionCreators: ActionCreatorsMapObject, dispatch: Dispatch -) { - const boundActionCreators: ActionCreatorsMapObject = {} +): ActionCreatorsMapObject { + const boundActionCreators: ActionCreatorsMapObject = {} + for (const key in actionCreators) { const actionCreator = actionCreators[key] if (typeof actionCreator === 'function') {