Оператор распространения состояния NGRX Тип должен иметь '[Symbol.iterator] ()' - PullRequest
0 голосов
/ 28 июня 2018

Я использую адаптер NGRX Entity для инициализации состояния (проблема возникает только с getInitialState).

 export const initialState = adapter.getInitialState({
      eventsError: null,
      eventsLoading: false
    });

    export function reducer(
      state = initialState,
      action: EventsActions
    ): State {
      switch (action.type) {

        case EventsActionTypes.getAllEvents: {
          return Object.assign({}, ...state, { // error line
            eventsLoading: true
          });
        }
// ...

Когда я хочу использовать оператор распространения для объекта состояния, я получаю ошибку:

ERROR in src/app/events/reducers/events.reducer.ts(36,35): error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator.

Вот мой файл tsconfig.json

    {
  "compilerOptions": {
    "noImplicitAny": true,
    "removeComments": true,
    "sourceMap": true,
    "target": "es6",
    "module": "commonjs",
    "experimentalDecorators": true,
    "noEmitHelpers": false,
    "emitDecoratorMetadata": true,
    "declaration": false,
    "lib": [
      "es2015",
      "dom"
    ],
    "moduleResolution": "node",
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true
  },
  "compileOnSave": false,
  "buildOnSave": false
}

1 Ответ

0 голосов
/ 28 июня 2018

Если вы используете Object.assign, вы не используете оператор распространения:

return Object.assign({}, state, { eventsLoading: true });

Что эквивалентно использованию распространения объекта следующим образом:

return { ...state, eventsLoading: true }

Object.assign объединяет несколько объектов , где распространение объекта расширяет ключи объекта в литерал объекта . По большей части распространение объекта делает Object.assign устаревшим.

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