Машинопись / Redux.Не могу написать интерфейс для Редуктора.Ошибка TS2322 - PullRequest
0 голосов
/ 06 октября 2018

Я не могу понять, почему я всегда получаю ошибку, когда использую interface ITitleIconSwitch с объявленным типом для state.

interface ITitleIconSwitch {
  'TITLE_ICON_SWITCH': (state: object) => {
    state: object; // this line provides me with an error stack. But! Without 'state' interface works fine. Why?
    titleSwitch: boolean;
  }
}

const actionHandlers: ITitleIconSwitch = {
  'TITLE_ICON_SWITCH': state => ({
    ...state,
    titleSwitch: false
  })
}

Сообщение об ошибке:

TS2322:

Тип '{[TITLE_ICON_SWITCH]: (состояние: объект) => {titleSwitch: false;};} 'нельзя назначить типу' IActionHandlers '.

Тип' {[TITLE_ICON_SWITCH]: (состояние: объект) => {titleSwitch: false;};} 'нельзя присвоить типу' IStateUpdate '.

Свойство' 'STATE_UPDATE' 'отсутствует в типе' {[TITLE_ICON_SWITCH]: (состояние: объект) => {titleSwitch: false;};} '.

1 Ответ

0 голосов
/ 15 октября 2018

Вам нужно написать свои типы для редуктора как функцию, а не как объект, потому что вы объявляете свой редуктор как объектно-ориентированный стиль.Поэтому вам нужно сделать то же самое с типами для этого редуктора:

export interface ITitleIconSwitch { . // typing for reducer
  [TITLE_ICON_SWITCH]: (state: object) => {
    titleSwitch: boolean
  }
}

export interface ITitleState { // typing for reducer state
  titleSwitch: boolean
}

и затем добавить их к конкретному редуктору:

const actionHandlers: IActionHandlers = {
  [TITLE_ICON_SWITCH]: (state: ITitleState) => ({
    ...state,
    titleSwitch: false
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...