Свойство 'map' не существует в типе 'Observable' после обновления rxjs до 6

Я обновил свое приложение Angular с версии 5.2 до 6.0 с инструкциями из https://update.angular.io/.

Теперь мое приложение Angular не собирается из-за миграции "rxjs-5-to-6-migrate":

ОШИБКА в bla.ts: ошибка TS2339: Свойство 'map' не существует для типа 'Observable'.

У меня есть следующий импорт:

import { Observable } from 'rxjs/observable';
import { of } from 'rxjs/observable/of';
import { map } from 'rxjs/operators';

Если я изменить импорт, как это работает:

import { Observable } from 'rxjs/observable';
import 'rxjs/Rx';

Но я не понимаю, почему... Я хочу использовать явный импорт, а не импортировать все операторы.


ОБНОВЛЕНИЕ: Как указывалось в некоторых ответах, я должен использовать каналы, чтобы иметь возможность использовать операторы. Это была моя проблема, потому что я думал, что все еще могу связать операторов с наблюдаемыми.

Старый стиль:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

this.http.get('/api/appsettings/get').map(data => { return true; }).catch(() => { return Observable.of(false); });

Новый стиль

import { of,  Observable } from 'rxjs';
import { catchError, map } from 'rxjs/operators';

this.http.get('/api/appsettings/get').pipe(map(data => { return true; }), catchError(() => { return of(false); }));

3 ответа

Решение

Вам нужно использовать pipe метод на Observable и передать карту функции внутри, например:

import { of } from 'rxjs';
import { map } from 'rxjs/operators';

of([1,2,3]).pipe(
  map(i => i*2)
);

Все объясняется здесь, в Руководстве по обновлению с RxJS v5.x до v6

Операторы импорта только из 'rxjs/operators' и операторы "создания" 'rxjs':

import { map } from 'rxjs/operators';
import { of } from 'rxjs';

Импорт из rxjs/Rx работает только потому, что вы добавили rxjs-compat пакет. Вы не должны использовать его после обновления до RxJS 6.

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

import { Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';

И вы не можете использовать Observable.of ты должен использовать of()

И вам нужно обернуть любой оператор внутри .pipe вот так:

.pipe(
     finalize(() => { this.isBusy = false; }),
     take(1),
     map(DATA => DATA.MESSAGEID)
)
Другие вопросы по тегам