Аргумент типа '{}' не может быть назначен параметру типа в Angular 8 - PullRequest
1 голос
/ 11 января 2020

У меня есть метод обработки ошибок:

private handleError<T>(operation = 'operation', result?: T) {
    return (error: any): Observable<T> => {
      console.error(error);
      this.log(`${operation} failed: ${error.message}`);

      return of(result as T);
    };
  }

  private log(message: string) {
    console.log(message);
  }

, и я хочу использовать его внутри моего метода:

getMyStructure(): Observable<HttpResponse<StructureResponse>> {
    return this.http.get< StructureResponse >(
        localUrl).pipe(retry(3), catchError(this.handleError<StructureResponse>('getMyStructure', {})));
}

, но последний {} выдает мне ошибку. StructureResponse - это интерфейс с некоторыми полями. В моем понимании я должен поставить туда какой-нибудь (пустой?) Объект StructureResponse, но я больше не уверен. Можете ли вы помочь мне с этим?

это StructureResponse:

interface SomeStructure {
  content: MyStructure[];
  page: number;
  size: number;
  totalElements: number;
  totalPages: number;
  last: boolean
}

Ответы [ 2 ]

1 голос
/ 12 января 2020

Добавить? к каждому свойству.

interface SomeStructure {
  content?: MyStructure[];
  page?: number;
  size?: number;
  totalElements?: number;
  totalPages?: number;
  last?: boolean
}

Используйте Observable<StructureResponse> вместо Observable<HttpResponse<StructureResponse>>, как показано ниже.

getMyStructure(): Observable<StructureResponse> {
    return this.http.get< StructureResponse >(
        localUrl).pipe(retry(3), catchError(this.handleError<StructureResponse>('getMyStructure', {})));
}
0 голосов
/ 11 января 2020

Если вы передадите пустой объект, единственный способ, которым он будет назначен интерфейсу, это то, что все атрибуты интерфейса являются необязательными (с?), В противном случае вам нужно как минимум показать свои атрибуты в вашем объекте с нулевое или другое значение.

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