Преобразование карты rxjs 5 в карту rxjs 6

Рассмотрим следующий код Angular 5 + старше rxjs

this.measurementUnitsService.GetAll().subscribe(
        res => {
            this.measurementUnits = res.map(x => new MeasurementUnit(x));
        }
    )

Я получаю список объектов и для каждого из них создаю новый строго типизированный класс.

Как бы я поступил так же в угловых 6 + rxjs 6 Моя попытка.

this.measurementUnitsService.GetAll().pipe<MeasurementUnit[]>(mergeMap(x => new MeasurementUnit(x))).subscribe(
  res => {
    this.measurementUnits = res;
  }
)

К сожалению выдает ошибку Type 'MeasurementUnit[]' has no properties in common with type 'Partial<MeasurementUnit>'.

MeasurementUnit так, на всякий случай

export class MeasurementUnit {
Id: number;
CreatedDate: Date;
ModifiedDate: Date;
Disabled: boolean;
DisabledDate: Date;
Name: string;
Description: string;

ParentId: number;

public constructor(item: Partial<MeasurementUnit>) {
    //item.EstablishedDate = new DatePipe('en-US').transform(item.EstablishedDate, "yyyy-MM-dd");

    Object.assign(this, item);
}
}

1 ответ

Решение

У вас есть Observable<MeasurementUnit[]> не Observable<MeasurementUnit>,

Это означает, что когда наблюдаемое излучает значение, это будет массив, а не одно значение. Следовательно, вам нужен нормальный array карта, а не Observable один.

Просто делать:

this.measurementUnitsService.GetAll()
  .pipe(
    map(array => array.map(x => new MeasurementUnit(x)))
  ).subscribe(res => this.measurementUnits = res);
Другие вопросы по тегам