【问题标题】:Angular v6, rxjs v6 error TS2339: Property 'pipe' does not exist on type 'OperatorFunctionAngular v6、rxjs v6 错误 TS2339:“OperatorFunction”类型上不存在属性“管道”
【发布时间】:2018-10-28 23:55:02
【问题描述】:

我已经使用 rxjs-lint 包和以下命令将与 Angular 5.5/rxJS5.5 配合使用的新 pipe 方法更新为 Angular 6/rxJS6 的代码

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

Imports 等已按预期进行了修改,但现在与 Angular 的 v5/RxJS 的 5.5 正常工作的代码出现错误:

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

我已经删除了 rxjs6-compat 包,但它没有任何区别。几乎就好像构建认为它拥有比 v5.5 更早的 rxJS 版本。 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 可以正常工作的情况下导致此错误?

【问题讨论】:

    标签: angular6 rxjs6


    【解决方案1】:

    你应该像这样导入合并:

    import { merge } from 'rxjs';
    

    【讨论】:

    • 您能否提供有关您的答案的更多详细信息,例如它在做什么、为什么起作用等?
    • 大概是因为他们将操作符从 rxjs/operators 移到了 rxjs?
    • 我正在从 'rxjs/operators' 导入合并,切换到 'rxjs working'
    • 这绝对是正确答案。我在combineLatest 上遇到了同样的错误,结果我犯了完全相同的错误。
    【解决方案2】:

    合并操作符应该从"rxjs/observable"导入。

    这样

    import { merge } from "rxjs/observable/merge";
    

    【讨论】:

      【解决方案3】:

      替换

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

      有了这个

      this.router.events.pipe(filter(event => event instanceof NavigationEnd), 
        map(() => {
          let route = this.activatedRoute;
      

      【讨论】:

      • 谢谢!已经为此苦苦挣扎了几个小时。
      • 补丁已显示,但错误原因尚不清楚
      猜你喜欢
      • 2018-11-25
      • 1970-01-01
      • 2021-10-22
      • 2021-12-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 2019-01-21
      • 2016-08-13
      相关资源
      最近更新 更多