Наблюдаемая ошибка загрузки Angular RxJS

Я объявил наблюдаемую переменную

workOrders: Observable<IWorkOrders[]>;

И затем я загружаю это наблюдаемое таким образом.

  this.bs.getWorkOrders()
  .pipe(map(data:IWorkOrders[]) => this.workOrders = data)),
    .subscribe((data: IWorkOrders[]) =>
      // this.workOrders = data;
      this.woSubject.next(data),
  );

но когда я это делаю, я вижу красную волнистую линию под строкой this.workOrders = data. А также, когда я нахожу указатель мыши, появляется сообщение [ts] Тип 'IWorkOrders []' не может быть назначен типу 'Observable'  введите описание изображения здесь


person Sumchans    schedule 26.05.2018    source источник


Ответы (2)


workOrders=this.bs.getWorkOrders(); будет работать

workOrders относится к типу Observable. data относится к типу IWorkOrders[], поскольку это 2 разных типа, поэтому вы получаете ошибку. Вы не можете назначить IWorkOrders[] to Observable.

person Antoniossss    schedule 26.05.2018
comment
@Sumchans 2 разных типа - таким образом, ошибка - я отредактировал ответ. - person Antoniossss; 26.05.2018
comment
Итак, вы говорите, что если я объявлю так workOrders: IWorkOrders, я могу назвать это так из моего компонента this.bs.getWorkOrders (). subscribe. - person Sumchans; 26.05.2018
comment
Да, вы можете, если вам действительно нужно Obeservable в вашем компоненте с гарантированным излучаемым значением. - person Antoniossss; 27.05.2018
comment
Хорошо, спасибо, все еще новичок в angular и observables, совершенно запутанные концепции. - person Sumchans; 27.05.2018
comment
Наблюдаемый - это маленький бит, похожий на простой старый шаблон слушателя + потоки - person Antoniossss; 27.05.2018

Как указано в сообщении об ошибке - workOrders имеет тип Observable<IWorkOrders[]>, а переменная data имеет тип IWorkOrders[]. В вашем случае вы пытаетесь назначить друг другу два несовместимых типа. В функции map вы получаете значение Observable, которое имеет тип IWorkOrders[].

Что вам нужно сделать, так это объявить workOrders как IWorkOrders[] вместо Observable этого типа:

workOrders: IWorkOrders[];

P.S. у вас есть лишняя запятая в конце .pipe(map(data:IWorkOrders[]) => this.workOrders = data)), <--

person Tsvetan Ganev    schedule 26.05.2018
comment
Я попробовал, чтобы это сработало, а затем как мне подписаться на переменную workOrders из другого компонента, если она не является наблюдаемой. - person Sumchans; 26.05.2018
comment
Есть много разных способов передать данные другим компонентам, в зависимости от того, чего именно вы хотите достичь. - person Tsvetan Ganev; 26.05.2018
comment
Разве это не должно быть наблюдаемым для меня, чтобы подписаться на другие компоненты? - person Sumchans; 26.05.2018
comment
Пожалуйста, объясните, что вы хотите сделать, потому что это непонятно, глядя всего на 3 строки кода без контекста. - person Tsvetan Ganev; 26.05.2018