Возможная ошибка в модуле `typesafe-actions` для TypeScript - PullRequest
1 голос
/ 25 января 2020

Я начал миграцию из JavaScript React проекта в TypeScript React. Я использую Redux и Sagas для своего магазина и обработки побочных эффектов.

Я обнаружил одну проблему, которую сам не могу объяснить. Модуль typesafe-actions включает API для простого создания типизированных редукторов .

Давайте рассмотрим примеры того же редуктора, но написанные по-другому:

// This reducer works as expected
const reducer = createReducer<IState, RootAction>(initialState).handleAction(
  fetchProfileAsync.success,
  (state, action) => {
    return {
      ...state,
      profile: action.payload,
    };
  }
);

// This reducer have TypeScript errors:
const reducer = createReducer<IState, RootAction>(initialState).handleType(
  EActionTypes.FETCH_PROFILE_SUCCESS,
  (state, action) => {
    return {
      ...state,
      profile: action.payload,
    };
  }
);

Во втором примере , action переменная набирается как:

action: {type: EActionTypes.FETCH_PROFILE_SUCCESS;payload: {}; } | PayloadAction<EActionTypes.FETCH_PROFILE_SUCCESS, IUser

Это мое определение этого действия:

export const fetchProfileAsync = createAsyncAction(
  EActionTypes.FETCH_PROFILE_REQUEST,
  EActionTypes.FETCH_PROFILE_SUCCESS,
  EActionTypes.FETCH_PROFILE_FAILURE
)<undefined, IUser, Error>();

Почему action переменная может быть IUser ИЛИ {} в второй пример, когда я не определил это так?

Работает нормально, когда я не использую handleType, но handleAction

...