Как вывести параметр generi c в типе возвращаемого значения в машинописи - PullRequest
0 голосов
/ 02 мая 2020

У меня есть тип

export type AppThunk<ReturnType> = ThunkAction<
  ReturnType,
  RootState,
  unknown,
  Action<string>
>;

Теперь, если я использую это, как показано ниже

export const loadCourse = (id: string): AppThunk => {
  return (dispatch: Dispatch) => {
    dispatch(loadCourseSuccess(undefined));
    return api
      .getCourse(id)
      .then((course) => dispatch(loadCourseSuccess(course)));
  };
};

Компилятор машинописного текста жалуется и говорит мне предоставить универсальный параметр c в AppThunk, как сделать так, чтобы он автоматически определял тип возвращаемого параметра c?

1 Ответ

0 голосов
/ 02 мая 2020

Здесь есть три разных вопроса:

  • Как правильно определить и использовать обобщенные c параметры в TS
  • Как правильно определить и использовать тип AppThunk
  • Как можно вывести правильный тип возврата здесь

Прямо сейчас, ваш тип AppThunk ожидает, что ему должен быть дан универсальный параметр c, ReturnType. Итак, вы должны использовать его как AppThunk<TheActualReturnType> - в данном случае что-то вроде AppThunk<Promise<void>>, потому что вы на самом деле ничего не возвращаете из окончательного .then().

Мы обычно Рекомендуется, чтобы типу AppThunk было присвоено значение по умолчанию для `ReturnType, так как многие thunks фактически ничего не возвращают, например:

export type AppThunk<ReturnType = void> = ThunkAction<
  ReturnType,
  RootState,
  unknown,
  Action<string>
>;

Таким образом, вы можете использовать его как AppThunk, не имея чтобы указать тип возвращаемого значения.

И, наконец, ... с использованием AppThunk, я не сразу думаю, что может определить тип возвращаемого значения здесь, потому что вы ' re , говорящий TS, какой тип этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...