Skip to content

Allow For Passing Meta Type ActionCreatorFactory.async and AsyncActionCreators #62

Open
@dcurletti

Description

Hi there-

Issue: I am unable to pass a TypeScript Type for the meta object that an actionCreator produces.


Example:
I want to create async actions for an event "login":

interface LogInData { email: string }
interface LogInResponseData { token: string }
interface LogInErrorData { error: string }

const logIn = actionCreator.async<LogInData, LogInResponseData, LogInErrorData>('LOGIN');

I also want to pass data via the meta object on the action.

dispatch(login.started({email: '[email protected]'}, {info: true}))

I now want to define what my action will look like, as well as create the saga:

import {Action} from 'redux';

interface LoginAction extends Action {
  meta: { info: boolean }
}

export function* loginFunc(action: LoginAction) {
  ...irrelevant
}

takeEvery(logIn.started,loginFunc),

The issue arises when you try to test the code:

const startAction = logIn.start({email: '[email protected]'}, {info: true})

loginFunc(startAction)

startAction will throw a TypeScript error because its meta property has a different definition than that of LoginAction


My suggestion would be to add something like:

const logIn = actionCreator.async<LogInData, LogInResponseData, LogInErrorData, MetaData>('LOGIN');

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions