Redux +打字稿+类型安全操作:

时间:2019-01-17 16:37:59

标签: reactjs typescript redux

使用Typescript 3.2.2和typesafe-actions 3.0.0时出现问题。我在下面创建了一个显示问题的示例。

基本上在我的化简器中,payload没有在action上定义,因为我的某些动作是EmptyAction类型的,它没有定义payload属性。如果将它们更改为具有空的有效负载({}),则将为所有操作定义payload,但是现在payload的类型尚未基于{{1} }(在减速器中)。

我相信我正确地遵循了Mighty Tutorial

工作示例:https://github.com/JoshMcCullough/react-ts-test

action-types.ts

type

actions.ts

export default {
    GET_PROFILES_REQUEST: "GET_PROFILES_REQUEST",
    GET_PROFILES_SUCCESS: "GET_PROFILES_SUCCESS",
    GET_PROFILES_FAILURE: "GET_PROFILES_FAILURE",
};

reducer.ts

import { action } from "typesafe-actions";
import { ApiErrorResponse } from "../../app/api/ApiErrorResponse";
import { Profile } from "../../app/models/Profile";
import ActionTypes from './action-types';

export const getProfilesRequest = () => action(ActionTypes.GET_PROFILES_REQUEST); // EmptyAction<string>
export const getProfilesSuccess = (profiles: Profile[]) => action(ActionTypes.GET_PROFILES_SUCCESS, { profiles }); // Action<string, { profiles: Profile[] }>
export const getProfilesFailure = (error: ApiErrorResponse) => action(ActionTypes.GET_PROFILES_FAILURE, { error }); // Action<string, { error: ApiErrorResponse }>

1 个答案:

答案 0 :(得分:0)

原来我的动作类型未定义为const!我已经忽略了它,因为我正在升级现有的代码库。

解决方案是确保它们为const

action-types.ts

export const GET_PROFILES_REQUEST = "GET_PROFILES_REQUEST";
export const GET_PROFILES_SUCCESS = "GET_PROFILES_SUCCESS";
export const GET_PROFILES_FAILURE = "GET_PROFILES_FAILURE";
相关问题