Напечатайте для создателя действия приведения - PullRequest
0 голосов
/ 01 октября 2019

Я в настоящее время смущен типом моего создателя действия в приложении Reaction-Redux, над которым я работаю. У меня есть этот создатель действий с типами по обе стороны уравнения, и компилятор TS сказал, что все идеально:

const setItem: ActionCreator<ThunkResult<void>> = (...): ThunkResult<void> => (...): void => {
  dispatch({
    ...
  });
};

, где ThunkResult ThunkResult<R> = ThunkAction<R, IStoreState, null, ActionTypes>

Что мне не понятно, почему нас левой стороны возвращается тип функции ActionCreator<ThunkResult<void>>, с правой стороны - ThunkResult<void>.

Примечание : я пропустил аргументы, так как они не важны в этом вопросе.

Я не уверен, является ли это неправильным пониманием функций TS или это проблема в TS.

1 Ответ

1 голос
/ 01 октября 2019

Я могу упростить для вас понимание. Во-первых, просто подумайте: ActionCreator - это Тип , и он будет

type ActionCreator<T> = (params) : T => T
// then you can defined the variable
const setItem: ActionCreator<string> = (params) : string => ""

Как ThunkResult

type ThunkResult<T> = (params): T => T
// then you can defined the variable
const thunk: ThunkResult<number> = (params): number => 0

Так что, если вы смешаете их, будет так:

ActionCreator<ThunkResult<void>> = (params) : ThunkResult<void> => ThunkResult<void>
// and 
ThunkResult<void> = (params):void => void
// so
ActionCreator<ThunkResult<int>> = (params): ThunkResult<void> => (params2): void => void // just replace ThunkResult<void> above with (params):void => void

Надеюсь, это поможет

...