Типы TypeScript Ошибка при использовании функций с операторами tap и map RxJS? - PullRequest
0 голосов
/ 18 мая 2018

Я получаю странные ошибки TypeScript, и мне трудно понять, что не так.Мой код работает нормально, но среда разработки PHPStorm выдает следующие ошибки:

TS2345 Argument of Type 'UnaryFunction<Observable<{}>, Observable<{}>>' is not assignable to parameter of type 'OperatorFunction<Object, {}>'.

Эта ошибка связана с функцией нажатия в приведенном ниже коде.

// Get Search Results
getSearchResults(payload: object): Observable<SearchResult[]> {
    let sbRef = this.snackBar.openFromComponent(SmallSpinnerComponent);
    let preparedPayload = this.addPayloadIdentifiers(payload);

    return this.http.post(environment.searchUrl, preparedPayload, {responseType: 'json'}).pipe(
        tap(res => console.log(res)),
        map(res => {
            sbRef.dismiss();
            return this.translateJSONResultSetV1(res);
        }),
        catchError(this.errorHandler.handleError(`getSearchResults error`))
);
}

Если я закомментирую оператор tap полностью, я получу следующую ошибку на операторе map :

TS2345 Argument of Type 'UnaryFunction<Observable<{}>,
Observable<SearchResult[]>>' is not assignable to parameter of type
'OperatorFunction<Object, {}>'.
Types of parameters 'source' and 'source' are incompatible.
Type 'Observable<Object>' is not assignable to type 'Observable<{}>'

IЯ склонен думать, что ошибка действительно довольно проста, но я не могу понять, что ее вызывает.Кроме того, полезная нагрузка JSON, получаемая от RESTful, требует небольшой обработки на стороне клиента.Это неизбежно, поэтому я использую вспомогательную функцию translateJSONResultSetV1 в операторе map для возврата правильных типов объектов.Неправильно ли использовать функцию внутри оператора map ?Может ли это быть причиной ошибок?

Хочу подчеркнуть, что код работает нормально.Однако, если я некорректно работаю с Observables, я хочу исправить это, чтобы этот код не заканчивал с будущими обновлениями.

EDIT: Версия RxJS 5.5.2

Импорт:

import { Injectable } from '@angular/core';
import { HttpClient} from '@angular/common/http';
import { environment } from "../../../environments/environment";
import { catchError, map, tap} from "rxjs/operators";
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/fromEvent';
import 'rxjs/add/observable/merge';
import { ErrorHandlerService } from "./error-handler.service";
import { SearchFilterDropdown } from "../../classes/search-filter-dropdown";
import { SessionService } from "./session.service";
import { BusinessRule } from "../../classes/business-rule";
import { SearchResult } from "../../classes/search-result";
import { SectionHeading } from "../../classes/section-heading";
import { SmallSpinnerComponent } from "../../shared/small-spinner/small-spinner.component";
import { MatSnackBar } from "@angular/material";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...