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
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.
What you need to update:
Update import statements from
import { Observable } from "rxjs/Observable";
to
import { Observable } from "rxjs";
Update your operator imports from
import 'rxjs/add/operator/do'
to
import { do } from "rxjs/operators";
Some operators have also been renamed due to name collisions with JavaScript reserved words. They are
do
=> tap
catch
=> catchError
switch
=> switchAll
finally
=> finalize
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);