ReactiveX / rxjs-tslint

TSLint rules targeting RxJS
MIT License
309 stars 41 forks source link

rxjs-5-to-6-migrate doesn't seem to handle operator chaining. #55

Open richrd opened 6 years ago

richrd commented 6 years ago

I'm having issues with migrating and still have some type errors that the migrate tool didn't fix. It seems to be related to operator chaining.

BEFORE:

return this.api.request(config).map(res => {
  this.translations = JSON.parse(res.translations);
  return res;
}).share();

AFTER:

return this.api.request(config).pipe(
  map(res => {
    this.translations = JSON.parse(res.translations);
    return res;
  }))
  .share();

EXPECTED:

return this.api.request(config).pipe(
  map(res => {
    this.translations = JSON.parse(res.translations);
    return res;
  }), share());

If I understand correctly the share() in this case should be within the pipe call after map separated by a comma (as shown above). Let me know if I'm mistaken!

Here are the some of the remaining rxjs related type errors I'm getting after the migrate:

error TS2339: Property 'takeUntil' does not exist on type 'Observable<any>'.
error TS2339: Property 'debounceTime' does not exist on type 'EventEmitter<any>'.
error TS2339: Property 'first' does not exist on type 'EventEmitter<any>'.
error TS2339: Property 'share' does not exist on type 'Observable<any>'.
error TS2339: Property 'forkJoin' does not exist on type 'typeof Observable'.
error TS2339: Property 'from' does not exist on type 'typeof Observable'.
error TS2339: Property 'flatMap' does not exist on type 'Observable<any>'.
error TS2339: Property 'forkJoin' does not exist on type 'typeof Observable'.
error TS2339: Property 'from' does not exist on type 'typeof Observable'.
capz commented 6 years ago

i am surpised it updated anything other than the imports, in my case it only updated those, and left me with hundreds of errors of chained .operator calls to manually rewrite as lettable operator calls.

so it doesn't handle operator chaining well at all

richrd commented 6 years ago

For me it handled map and a few others but didn't add all the imports. I went ahead and fixed the rest of our code manually.

kvetis commented 4 years ago

The solution, mentioned in the readme, is to run the migrations when having version 5 of RxJS installed. If you have new version installed, downgrade it, run migrations and then install desired version again. Readme:

Note: The rules use type checking to find all the instances of operators that need to be migrated to pipeables. This requires you to have rxjs@5 installed so that tslint could find the correct type definitions.