React + Redux + Redux-Thunk создатель действий, что это за типы? - PullRequest
0 голосов
/ 31 марта 2020

Я хотел бы попросить о помощи или совете с приложением react, typescript, которое использует Redux Thunk в качестве промежуточного программного обеспечения.

Мое приложение использует структуру файла ducks для Redux .

Я пытаюсь отправить action, который Redux-Thunk action creator, который также отправляет Redux-Thunk action creator (Извините за мой Engli sh Я постараюсь объяснить это с кодом).

Допустим, у меня есть создатель действия, подобный этому:

    /** 
     * Not going to work unless I will explicitly change return type to `any` or do `as any` when dispatching this action from another action creator.
     */ 
export function setData(
  value: boolean
): ThunkAction<void, AppState, null, SetDataAction> {
  return (dispatch: Dispatch, getState: () => AppState): void => {
      dispatch({
        type: SHOW_ALL_DATA,
        payload: false,
      });
    }
  };
}
Чем позже, где-то в моем приложении у меня есть другое действие , которое dispatch вышеописанное действие:
export function setSomeExtraData(
  value: boolean
): ThunkAction<void, AppState, null, SetExtraDataAction> {
  return (dispatch: Dispatch, getState: () => AppState): void => {
    dispatch(setData(true)); // not working
    // dispatch((setData as any)(true));working
    }
  };
}
Сообщение об ошибке выглядит так:
No overload matches this call.
  Overload 1 of 3, '(action: RSAAAction<any, unknown, unknown>): Promise<RSAAResultAction<unknown, unknown>>', gave the following error.
    Argument of type 'ThunkAction<Promise<void>, null, CombinedState<{ auth: CombinedState<{ username: string; authToken: string; signInTimestamp: number; }>; currentUser: CombinedState<{ user: User | null; isLoading: boolean; loaded: boolean; }>; ... 12 more ...; inflightRequests: CombinedState<...>; }>, LogsActionTypes> | undefined' is not assignable to parameter of type 'RSAAAction<any, unknown, unknown>'.
      Type 'undefined' is not assignable to type 'RSAAAction<any, unknown, unknown>'.
      ...
      ...

Итак, что мы получили. Обычно, когда я не отправляю thunk-action creator, мне даже не нужно указывать тип возврата, как я это сделал здесь:

ThunkAction<void, AppState, null, SetDataAction>

печатать более умнее, чем я, чтобы выбрать правильный типы, но в моем случае я ищу правильные типы, чтобы Typescript не жаловался.

В качестве ссылки я видел это сообщение StackOverflow , но ни одно из решений не работает для меня. Пожалуйста, дайте мне знать, если для моего случая существует правильный тип или as any - это только один вариант здесь (кроме рефакторинга кода, чтобы избежать отправки redux-thunk action creator)

Спасибо!

...