I'm develop new application and I encountered an error. When I try to dispatch action, I got an error like this:
Argument of type '(dispatch: Dispatch) => Promise' is not assignable to parameter of type 'T'. Property 'type' is missing in type '(dispatch: Dispatch) => Promise' but required in type 'X'.
Has anyone encountered this problem or can help me? I'm using packages:
- "react": "^16.7.0",
- "react-dom": "^16.7.0",
- "react-redux": "^6.0.0",
- "react-router-dom": "^4.3.1",
- "redux": "^4.0.1",
- "redux-thunk": "^2.3.0",
- "typescript": "^3.3.1"
This is my code:
Container:
import { connect } from 'react-redux';
import { Dispatch } from 'react';
import { loginUser, Actions } from './actions';
import Screen, { Props } from './Screen';
const mapDispatchToProps = (dispatch: Dispatch<Actions >): Props => ({
login: (userName: string, password: string) => {
dispatch(loginUser(userName, password)); }
});
export const ScreenContainer = connect(mapDispatchToProps)(Screen);
Props:
export interface Props {
login: (userName: string, password: string) => void;
}
Actions:
import { Dispatch } from 'redux';
export type Actions =
LoginRequest
| LoginSuccess
| LoginFailure;
export const loginRequest = (): LoginRequest => ({
type: types.LOGIN_REQUEST,
});
export const loginFailure = (): LoginFailure => ({
type: types.LOGIN_REQUEST_FAILED,
});
export const loginSuccess = (): LoginSuccess=> ({
type: types.LOGIN_REQUEST_SUCCESS,
});
export interface LoginRequest {
type: types.LOGIN_REQUEST;
}
export interface LoginFailure {
type: types.LOGIN_REQUEST_FAILED;
}
export interface LoginSuccess{
type: types.LOGIN_REQUEST_SUCCESS;
}
export const loginUser = (email: string, password: string) => async
(dispatch: Dispatch<Actions>) => {
dispatch(loginRequest());
try {
dispatch(loginSuccess());
} catch (error) {
dispatch(loginFailure());
}
};