Я начал миграцию из 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