Создать root редуктор с типами безопасных действий - PullRequest
1 голос
/ 24 апреля 2020

Я использую typesafe-actions и хотел бы создать редуктор root, который позволит мне обрабатывать глобальные действия, такие как LOGGED_OUT, для очистки состояния. Как в ответе на этот вопрос .

Я пробовал несколько вещей, но я теряю безопасность типов, которую обеспечивает typesafe-actions, и редуктор возвращается к типу any .

У меня довольно безопасная настройка действий ванильного типа. Я не опубликовал решения по перестановке неявной типизации, которые я пробовал, потому что я не думаю, что это добавит ясности в вопрос.

Самое близкое к найденному решению было в эта тема . Ответственный за безопасные действия типа сам отправил ответ и упомянул, что у него уже есть решение, хотя с этого момента не было никаких ссылок или ссылок.

Любая помощь будет великолепной.

Для справки, я могу заставить это работать функционально, следуя шаблону в соответствии с вопросом о переполнении стека, который я опубликовал, однако типы не работают.

1 Ответ

1 голос
/ 27 апреля 2020

Оказывается, я уже решил эти 9 месяцев go в отдельном проекте и забыл.

import { combineReducers } from 'redux';
import auth from '../modules/auth/reducer';
import feed from '../modules/feed/reducer';
import post from '../modules/post/reducer';
import profile from '../modules/profile/reducer';
import { StateType, Reducer, RootAction } from 'typesafe-actions';
import { signOut } from 'modules/auth/actions';

const appReducer = combineReducers({
  auth,
  feed,
  post,
  profile
});

type RootState = StateType<typeof appReducer>;

const clearOnSignOutReducer: Reducer<RootState, RootAction> = (
  state,
  action
) => {
  if (action.type === signOut().type) {
    state = undefined;
  }
  return appReducer(state, action);
};

export default clearOnSignOutReducer;

...