Свойство 'map' не существует в типе 'Observable' после обновления rxjs до 6 - PullRequest
0 голосов
/ 18 мая 2018

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

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

ОШИБКА в bla.ts: ошибка TS2339: Свойство« карта »не существует для типа« Наблюдаемый ».

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

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 ]

0 голосов
/ 18 мая 2018

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

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

of([1,2,3]).pipe(
  map(i => i*2)
);
0 голосов
/ 18 мая 2018

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

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)
)
0 голосов
/ 18 мая 2018

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

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

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

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

...