RxJS: catchError возвращает тип объединения - PullRequest
0 голосов
/ 16 мая 2019

Я имею в виду, catchError возвращает Observable тип объединения: Observable<{} | Page} вместо Observable<Page>.

Я получаю это сообщение компилятора:

Type 'Observable<{} | Page>' is not assignable to type 'Observable<Page>'.
  Type '{} | Page' is not assignable to type 'Page'.
    Type '{}' is missing the following properties from type 'Page': total, audits

код:

public searchFromStorageByCriteria(filter: Query): Observable<Page> {
    const buildPage = () => map((response: Response) => this.buildPage(response));
    const onErrorEmptyPage = () => catchError(() => Observable.of(Page.EMPTY));

    let url:string = this.buildURL(user, app, filter);
    return this.authHttp.get(url)
        .pipe(
            buildPage(),
            onErrorEmptyPage()
        );
}

Проблема находится на catchError, поскольку:

export declare function catchError<T, R>(selector: (err: any, caught: Observable<T>) => ObservableInput<R>): OperatorFunction<T, T | R>;

Как вы можете видеть, он возвращает : OperatorFunction<T, T | R>, а также caught: Observable<T>.

Page.EMPTY - это:

export class Page {
    readonly total: number;
    readonly audits: Array<Audit>;

    public static EMPTY:Page = {total: 0, audits: []};
}

Есть идеи?

1 Ответ

0 голосов
/ 16 мая 2019

Решение заключается в переопределении catchError подписи:

catchError<Page, never>

Взгляните на никогда не печатайте .

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