Ngrx получает элемент из состояния хранилища: тип ‘Item []’ не имеет следующих свойств

#angular #typescript #rxjs #ngrx

#angular #typescript #rxjs #ngrx

Вопрос:

Я хотел бы получить состояние моего хранилища элементов, но я получаю сообщение об ошибке «не присваивается»

ItemReducer

 export const initState: Item[] = [...];

export function ItemReducer(state = initState, action: ActionParent) {
  switch (action.type) {
    default:
      return state;
  }
}
  

ItemListComponent

 export class myItemsComponent implements OnInit {

  myItems: Observable<Item[]>;

  constructor(private store: Store<{ items: Item[] }>) {}

  ngOnInit(): void {
    this.store
      .select('items')
      .subscribe((data: Item[]) => (this.myItems = data)); // error here
  }
}
  

итак, у меня ошибка типа:

 Type 'Item[]' is not assignable to type 'Observable<Item[]>'.ts(2322)
Type 'Item[]' is missing the following properties from type 'Observable<Item[]>': _isScalar, source, operator, lift, and 5 more.
  

Ответ №1:

myItems является наблюдаемым. Пожалуйста, удалите подписку или измените тип myItems . Предпочтительным способом должно быть удаление подписки (использование асинхронного канала).

Удалить способ подписки

 ngOnInit(): void {
    this.myItems = this.store.select('items');
  }
  

Способ изменения типа

 myItems: Item[];
  

Комментарии:

1. но если я удалю «subscribe» в ngOnInit, если я решу console.log (this.mapItems) Я не вижу элементы на консоли.

2. Да, потому что это наблюдаемое. Вы можете добавить оператор tap на случай, если захотите его дополнительно распечатать.

Ответ №2:

Вы определили myItems его как наблюдаемые, но вы присваиваете ему данные с типом Item[] . измените myItem тип на Item[] :

   myItems: Item[];