Машинопись: Как набирать комбинированные редукторы? - PullRequest
0 голосов
/ 19 февраля 2020

Я перевожу свой маленький проект React Native с чистого Javascript на Typescript. Пока все шло хорошо, у меня сейчас проблемы с Redux.

Редуктор, с которым я борюсь, - radioButtonSelectedReducer. В приложении есть две радиокнопки. Если щелкнуть первый элемент, он выдаст строку «itemOne», а если щелкнуть второй элемент, он выдаст строку «itemTwo». Поэтому radioButtonSelected должно быть типа string, подумал я. Но он выдает ошибку: radioButtonSelected: string; ->

"The expected type comes from property 'radioButtonSelected' which is declared here on type 'ReducersMapObject<IApplicationState, AnyAction>'" 

Я такой новичок Typescript ie и не знаю, что делать с этим сообщением.

imports ...

export interface IApplicationState {
  radioButtonSelected: string;
  searchBarInput: string;
  searchBarResult: string;
}

const rootReducer = combineReducers<IApplicationState>({
  radioButtonSelected: radioButtonSelectedReducer,
  searchBarInput: searchBarInputReducer,
  searchBarResult: searchBarResultReducer,
});

export type RootState = ReturnType<typeof rootReducer>; 

Когда я оставляю combineReducers() без <IApplicationState> и вызываю RootState в mapStateToProps(), выдает ошибку:

  error TS2339: Property 'itemSelected' does not exist on type 'CombinedState<{ radioButtonSelected: { itemSele
cted: string; }; searchBarInput: { inputValue: any; }; searchBarResult: { returnValue: any; }; }>'.

Вот фрагмент из компонента это реализует переключатели:

...

function mapStateToProps(state: RootState) {
  return {
    itemSelected: state.itemSelected,
  };
}

1 Ответ

1 голос
/ 19 февраля 2020

Вам не нужно объявлять IApplicationState или передавать его как обобщенный c на combineReducers(). На самом деле, это явно смысл type RootState = ReturnType<typeof rootReducer>. Он определяет, что представляет собой комбинированный тип состояния, поэтому вам не нужно объявлять его или постоянно обновлять.

Пожалуйста, обратитесь к странице документации Redux на странице "Использование с TypeScript" подробности.

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