Property 'do' does not exist on type 'Observable'

后端 未结 5 1340
遇见更好的自我
遇见更好的自我 2021-02-01 02:04

After upgrading to Angular 6.0 and Rxjs to 6.0 I receive the following compilation error:

Property \'do\' does not exist on type \'Observable\'.

Her

5条回答
  •  孤街浪徒
    2021-02-01 02:34

    The problem is not with angular but with rxjs. rxjs introduced breaking changes from rxjs version 6.

    To get your code working again without changing any of your code install the following package:

    npm install rxjs-compat@6 --save

    You should then be able to compile your project. rxjs-compat is meant to be a temporarily solution so you need to update your codebase to work with the new version.


    New Import Path

    What you need to update:

    1. Update import statements from

      import { Observable } from "rxjs/Observable";

      to

      import { Observable } from "rxjs";

    2. Update your operator imports from

      import 'rxjs/add/operator/do'

      to

      import { do } from "rxjs/operators";


    Renamed Operators

    Some operators have also been renamed due to name collisions with JavaScript reserved words. They are

    1. do => tap

    2. catch => catchError

    3. switch => switchAll

    4. finally => finalize


    No Operator Chaining

    You also then can't chain your operators anymore you need to use the pipe operator e.g.

    // an operator chain
    source
      .map(x => x + x)
      .mergeMap(n => of(n + 1, n + 2)
        .filter(x => x % 1 == 0)
        .scan((acc, x) => acc + x, 0)
      )
      .catch(err => of('error found'))
      .subscribe(printResult);
    
    // must be updated to a pipe flow
    source.pipe(
      map(x => x + x),
      mergeMap(n => of(n + 1, n + 2).pipe(
        filter(x => x % 1 == 0),
        scan((acc, x) => acc + x, 0),
      )),
      catchError(err => of('error found')),
    ).subscribe(printResult);
    

提交回复
热议问题