У меня есть следующий тип состояния для моего редукторного редуктора:
export interface CharactersState {
characters: CharacterType[];
error: string | null;
isFetching: boolean;
}
Затем я использую этот тип состояния с combReducer для создания моего магазина:
const initialState: CharactersState = {
characters: [],
error: null,
isFetching: true // initiated with fetching true on app load
};
const characters = (state = initialState, action: CharacterActionsType) => {
switch (action.type) {
// commented out reducer logic here since it is not relevant
//...
default:
return state;
}
};
const rootReducer = combineReducers({
characters
});
export type RootStateType = ReturnType<typeof rootReducer>;
export default rootReducer;
Затем я использую Этот rootReducer в компонентном контроллере:
const getCharacters = (state: RootStateType): CharactersState =>
state.characters;
export const makeCharactersList = createSelector<
RootStateType,
CharactersState,
CharacterListType[]
>(getCharacters, characters => {
return characters.characters
.map(character => {
return {
_id: character._id,
name: character.name,
description: character.description
};
})
.sort((a, b) => {
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
});
});
const mapStateToProps = (state: RootStateType) => {
return {
characters: makeCharactersList(state)
};
};
const mapDispatchToProps = (dispatch: any) => {
return {
handleDeleteClick: (_id: string | null) => {
dispatch(postDeleteCharacter(_id));
}
};
};
const connector = connect(mapStateToProps, mapDispatchToProps);
export type PropsFromRedux = ConnectedProps<typeof connector>;
export default connector(CharacterSidebar);
Контроллер отображается в родительском компоненте без пропусков:
<Sidebar />
Как написать правильное определение типа для makeCharactersList
? Кажется, что createSelector
должен принимать типы State, OwnProps, ConnectedProps - в моем случае кажется, что OwnProps будет просто пустым объектом?
Но когда я устанавливаю определение типа на:
createSelector<
RootStateType,
{},
CharacterListType[]
Я получаю следующую ошибку:
Свойство «символы» не существует для типа «{}».