Angular v6, ошибка rxjs v6 TS2339: свойство 'pipe' не существует для типа 'OperatorFunction

Я обновил код, который отлично работал с Angular 5.5 / rxJS5.5, используя новый метод pipe, до Angular 6 / rxJS6, используя пакет rxjs-lint и следующие команды

npm i -g rxjs-tslint
rxjs-5-to-6-migrate -p tsconfig.json

Импорт и т. Д. Были изменены, как и ожидалось, но теперь код, который отлично работал с v5 Angular / 5.5 RxJS, выдает ошибку:

 error TS2339: Property 'pipe' does not exist on type 'OperatorFunction<{}, {} | RouterEvent | RouteConfigLoadStart | RouteConfigLoadEnd | ChildActivati...'.

Я удалил пакет rxjs6-compat, но это не имеет значения. Это почти как если бы сборка думала, что у нее более ранняя версия rxJS, чем v5.5. package.json, используемый с npm install, выглядит так ...

"dependencies": {
    "@angular/animations": "^6.0.2",
    "@angular/cdk": "^6.0.2",
    "@angular/common": "^6.0.2",
    "@angular/compiler": "^6.0.2",
    "@angular/core": "^6.0.2",
    "@angular/flex-layout": "^6.0.0-beta.15",
    "@angular/forms": "^6.0.2",
    "@angular/http": "^6.0.2",
    "@angular/material": "^6.0.2",
    "@angular/platform-browser": "^6.0.2",
    "@angular/platform-browser-dynamic": "^6.0.2",
    "@angular/router": "^6.0.2",
    "@ngrx/effects": "^6.0.0-beta.3",
    "@ngrx/entity": "^6.0.0-beta.3",
    "@ngrx/router-store": "^6.0.0-beta.3",
    "@ngrx/store": "^6.0.0-beta.3",
    "@ngrx/store-devtools": "^6.0.0-beta.3",
    "@ngx-translate/core": "^9.0.1",
    "core-js": "^2.5.2",
    "hammerjs": "^2.0.8",
    "lodash": "^4.17.4",
    "material-design-icons-iconfont": "^3.0.3",
    "nsp": "^3.2.1",
    "passport": "^0.4.0",
    "passport-azure-ad": "^3.0.12",
    "rxjs": "^6.1.0",
    "zone.js": "^0.8.26"
  },

Импорт для операторов rxjs находится в формате rxjs6:

import { filter, map, merge, mergeMap } from 'rxjs/operators';

Утверждение, которое сработало, но теперь дает эту ошибку:

// Change page title on navigation or language change, based on route data
merge(this.translateService.onLangChange, onNavigationEnd)
  .pipe(
    map(() => {
      let route = this.activatedRoute;
      while (route.firstChild) {
        route = route.firstChild;
      }
      return route;
    }),
    filter(route => route.outlet === 'primary'),
    mergeMap(route => route.data)
  )
  .subscribe(event => {
    const title = event['title'];
    if (title) {
      this.titleService.setTitle(this.translateService.instant(title));
    }
  });

Что я пропустил? Почему канал вызывает эту ошибку теперь, когда это было нормально с rxJS 5.5?


person user8713457    schedule 18.05.2018    source источник


Ответы (3)


Заменять

merge(this.translateService.onLangChange, onNavigationEnd).pipe(

с этим

this.router.events.pipe(filter(event => event instanceof NavigationEnd), 
  map(() => {
    let route = this.activatedRoute;
person Suchith Arella    schedule 19.05.2018
comment
Спасибо! Боролся с этим несколько часов. - person user8713457; 21.05.2018
comment
патч отображается, но причина ошибки неясна - person cdaringe; 04.07.2018

Вы должны импортировать слияние следующим образом:

import { merge } from 'rxjs';
person Schtrudell    schedule 24.07.2018
comment
Не могли бы вы подробнее рассказать о своем ответе, например, что он делает, почему работает и т. Д.? - person Tim S.; 24.07.2018
comment
Предположительно потому, что перенесли оператор из rxjs / operator в rxjs? - person user8713457; 25.07.2018
comment
Я импортировал слияние из «rxjs / operator», переключаясь на «rxjs работал» - person Ash; 14.09.2018
comment
Это определенно правильный ответ. Я получил ту же ошибку с combineLatest, и оказалось, что я сделал ту же ошибку. - person John Montgomery; 27.06.2019

Оператор слияния должен быть импортирован из "rxjs / observable".

Нравится

import { merge } from "rxjs/observable/merge";
person faety_sal    schedule 08.12.2018