Angular 9 Введите любой [] | ReceiptResponse не присваивается типу - PullRequest
0 голосов
/ 30 марта 2020

Я использую HttpClient для извлечения записей из API JSON через службу. Я создал класс, который представляет объект, возвращенный из API идентично, однако я получаю следующую ошибку:

Type 'any[] | ReceiptResponse' is not assignable to type 'ReceiptResponse'

мой сервис имеет следующую функцию:

getPagedReceipts(
  filter = '',
  sortOrder = 'ASC',
  sortColumn = 'receipt.id',
  pageNumber = 0,
  pageSize = 5,
): Observable<ReceiptResponse> {
     return this.http.get<ReceiptResponse>(this.baseUrl, {
       params: new HttpParams()
         .set('filter', filter)
         .set('sortOrder', sortOrder)
         .set('sortColumn', sortColumn)
         .set('pageNumber', pageNumber.toString())
         .set('pageSize', pageSize.toString())
     }).pipe(
       catchError(this.handleError)
     );
}

Я вызываю это в следующей функции.

public receiptsResponse: ReceiptResponse;

this.receiptService.getPagedReceipts(filter, sortOrder, sortColumn,
  pageIndex, pageSize).pipe(
  catchError(() => of([])),
  finalize(() => this.loadingSubject.next(false))
).subscribe(receiptsResponse => {
  this.receiptsResponse = receiptsResponse; <-- this is location of the error.
  this.receipts = this.receiptsResponse.items; 
  console.log(this.receiptsResponse);
  this.receiptsSubject.next(this.receipts);
});

Это ReceiptResponse:

import {Receipt} from './receipt';

export class ReceiptResponse {
  public itemCount: number;
  public items: Receipt[];
  public next: string;
  public pageCount: number;
  public previous: string;
  public totalItems: number;


  constructor(
    itemCount?: number,
    items?: Receipt[],
    next?: string,
    pageCount?: number,
    previous?: string,
    totalItems?: number

  ) {
    this.itemCount = itemCount;
    this.items = items;
    this.pageCount = pageCount;
    this.next = next;
    this.previous = previous;
    this.totalItems = totalItems;
  }
}

1 Ответ

1 голос
/ 30 марта 2020

Это из-за вашего catch блока, который возвращает наблюдаемый пустой массив

catchError(() => of([])),

Попробуйте вернуть ноль вместо

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