Typescript + immutability-helper #set - PullRequest
       15

Typescript + immutability-helper #set

0 голосов
/ 30 ноября 2018

Я пришел, чтобы присоединиться к фургону с машинописью, и я хочу продолжать использовать эту библиотеку-помощник при неизменении, когда я обновляю свое хранилище с избыточностью, но по какой-то причине теперь я получаю эту ошибку, когда я пытаюсь выполнить обновление?:

[ts] Аргумент типа '{flags: {hideChat: {$ set: boolean;};};} 'нельзя назначить параметру типа' Spec '.Объектный литерал может указывать только известные свойства, а «flags» не существует в типе «Spec».

export interface GlobalStateInit {
  flags: {
    hideChat: boolean
  }
}

const initialState: GlobalStateInit = {
  flags: {
    hideChat: false
  }
}

const reducer: Reducer<GlobalStateInit, GlobalAction> = (state = initialState, action) => {
  switch (action.type) {
    case getType(actions.toggleChat):
      return update(state, {
        flags: {
          hideChat: { $set: !state.flags.hideChat }
        }
      })
    default:
      return state
  }
}

export { reducer as GlobalReducer }

Я предполагал, что это должно быть тривиально и должно работать из коробки, мойjest test, работающий в фоновом режиме, может понять это, но VScode TS Linter становится немного злым.

Не уверен, что это ошибка или это просто VScode, который не работает.

1 Ответ

0 голосов
/ 30 ноября 2018

Это преднамеренная функция компилятора.Вот краткая версия той же проблемы:

interface Example {
    name: string,
    val: number
}

const example: Example = {
    name: 'Fenton',
    val: 1,
    more: 'example'
}

Свойство more не является частью интерфейса Example, поэтому компилятор предупредит вас о том, что вы, возможно, допустили ошибку.Например, если есть необязательный элемент, который вы ввели неправильно, он поймет это для вас:

interface Example {
    name: string,
    val: number,
    side?: string
}

const example: Example = {
    name: 'Fenton',
    val: 1,
    sdie: 'Left' // Oops, I meant "side"
}

В тех случаях, когда вы думаете, что знаете лучше, чем компилятор, вы можете сказать, что выответственный:

interface Example {
    name: string,
    val: number
}

const example = {
    name: 'Fenton',
    val: 1,
    more: 'example'
} as Example

Это позволяет добавить дополнительных участников, в то же время гарантируя, что вы не допустите ошибку, например:

// Lots of errors!
const example = {
    more: 'example'
} as Example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...