повторно выбрать определения типа createSelector для хранилища с избыточностью - PullRequest
0 голосов
/ 06 марта 2020

У меня есть следующий тип состояния для моего редукторного редуктора:

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[]

Я получаю следующую ошибку:

Свойство «символы» не существует для типа «{}».

...