Подтвердить что ты не робот

Angular 2 beta.17: Свойство 'map' не существует в типе 'Observable <Response>'

Я только что перешел с Angular 2 beta16 на beta17, который, в свою очередь, требует rxjs 5.0.0-beta.6. (Журнал изменений здесь: https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta17-2016-04-28) В бета16 все работало хорошо в отношении функциональности Observable/map. Следующие ошибки появились после того, как я обновил и возникают, когда машинопись пытается перенести:

  1. Свойство 'map' не существует для типа 'Observable' (везде, где я использовал карту с наблюдаемой)
  2. c: /path/node_modules/rxjs/add/operator/map.d.ts(2,16): ошибка TS2435: окружающие модули не могут быть вложены в другие модули или пространства имен.
  3. c: /path/node_modules/rxjs/add/operator/map.d.ts(2,16): ошибка TS2436: объявление окружающего модуля не может указать относительное имя модуля.

Я видел этот вопрос/ответ, но это не решает проблему: Наблюдаемые ошибки с Angular2 beta.12 и RxJs 5 beta.3

Мой appBoot.ts выглядит так (я уже ссылаюсь на rxjs/map):

///<reference path="./../node_modules/angular2/typings/browser.d.ts"/>
import {bootstrap} from "angular2/platform/browser";
import {ROUTER_PROVIDERS} from 'angular2/router';
import {HTTP_PROVIDERS} from 'angular2/http';
[stuff]
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import {enableProdMode} from 'angular2/core';
import { Title } from 'angular2/platform/browser';


//enableProdMode();
bootstrap(AppDesktopComponent, [
    ROUTER_PROVIDERS,
    HTTP_PROVIDERS,
    Title
]);

Кто-нибудь имеет представление о том, что происходит с Haywire?

4b9b3361

Ответ 1

Я обновил свой плагин gulp - typescript до последней версии (2.13.0), и теперь он компилируется без сбоев.

ОБНОВЛЕНИЕ 1: Я ранее использовал gulp - typescript версию 2.12.0

ОБНОВЛЕНИЕ 2: Если вы обновляетесь до Angular 2.0.0-rc.1, вам необходимо сделать следующее в файле appBoot.ts:

///<reference path="./../typings/browser/ambient/es6-shim/index.d.ts"/>
import { bootstrap } from "@angular/platform-browser-dynamic";
import { ROUTER_PROVIDERS } from '@angular/router-deprecated';
import { HTTP_PROVIDERS } from '@angular/http';
import { AppComponent } from "./path/AppComponent";
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
// import 'rxjs/Rx'; this will load all features
import { enableProdMode } from '@angular/core';
import { Title } from '@angular/platform-browser';



//enableProdMode();
bootstrap(AppComponent, [
    ROUTER_PROVIDERS,
    HTTP_PROVIDERS,
    Title
]);

Важной вещью является ссылка на es6-shim/index.d.ts

Предполагается, что вы установили пиктограммы es6-shim, как показано здесь: введите описание изображения здесь

Подробнее о типизации установите из Angular здесь: https://angular.io/docs/ts/latest/guide/typescript-configuration.html#!#typings

Ответ 2

Вам нужно импортировать оператор map:

import 'rxjs/add/operator/map'

Ответ 3

Rxjs 5.5 "Свойство" map не существует по типу Observable.

Проблема была связана с тем, что нужно добавить конвейер вокруг всех операторов.

Измени это,

this.myObservable().map(data => {})

к этому

this.myObservable().pipe(map(data => {}))

А также

Импортировать карту, как это,

import { map } from 'rxjs/operators';

Это решит ваши проблемы.

Ответ 4

В моем случае этого было бы недостаточно, чтобы включить только карту и обещать:

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';

Я решил эту проблему, импортировав несколько компонентов rxjs, поскольку официальная документация рекомендует:

1) Импорт операторов в один файл приложения /rxjs -operator.ts:

// import 'rxjs/Rx'; // adds ALL RxJS statics & operators to Observable

// See node_module/rxjs/Rxjs.js
// Import just the rxjs statics and operators we need for THIS app.

// Statics
import 'rxjs/add/observable/throw';

// Operators
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/toPromise';

2) Импортируйте rxjs-operator в свою службу:

// Add the RxJS Observable operators we need in this app.
import './rxjs-operators';

Ответ 5

Если вы видите эту ошибку в VS2015, здесь упоминается проблема и решение проблемы github:

https://github.com/Microsoft/TypeScript/issues/8518#issuecomment-229506507

Это помогло мне решить проблему property map does not exist on observable. Кроме того, убедитесь, что у вас есть typescript версия выше 1.8.2

Ответ 6

ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ ДЛЯ тех, кто использует англ 6:

Добавьте приведенную ниже команду в ваш файл *.service.ts "

import { map } from "rxjs/operators";

**********************************************Example**Below**************************************
getPosts(){
this.http.get('http://jsonplaceholder.typicode.com/posts')
.pipe(map(res => res.json()));
}
}

Я использую Windows 10;

angular6 с машинописью V 2.3.4.0

Ответ 8

В угловых 2х

В example.component.ts

import { Observable } from 'rxjs';

В example.component.html

  Observable.interval(2000).map(valor => 'Async value');

В угловых 5x или угловых 6x:

В example.component.ts

import { Observable, interval, pipe } from 'rxjs';
import {switchMap, map} from 'rxjs/operators';

В example.component.html

valorAsync = interval(2500).pipe(map(valor => 'Async value'));

Ответ 10

Как я понимаю, это из-за последнего обновления rxjs. Они изменили некоторые операторы и синтаксис. После этого мы должны импортировать rx операторы, как это

import { map } from "rxjs/operators";

вместо этого

import 'rxjs/add/operator/map';

И нам нужно добавить трубу вокруг всех операторов, как это

this.myObservable().pipe(map(data => {}))

Источник здесь

Ответ 11

Как предложил Джастин Скофилд в своем ответе, для последнего выпуска Angular 5 и Angular 6, import 'rxjs/add/operator/map'; с 1 июня 2018 года, просто import 'rxjs/add/operator/map'; недостаточно для устранения ошибки TS: [ts] Property 'map' does not exist on type 'Observable<Object>'.

Для установки необходимых зависимостей необходимо выполнить приведенную ниже команду: npm install [email protected] [email protected] --save после чего ошибка зависимости от импорта map будет устранена!

Ответ 12

Похоже, что для последнего RxJS требуется typescript 1.8, поэтому typescript 1.7 сообщает об ошибке выше.

Я решил эту проблему, обновив до последней версии typescript.

Ответ 13

Я столкнулся с подобной ошибкой. Это было решено, когда я сделал эти три вещи:

  1. Обновление до последней версии rxjs:

    npm install [email protected] [email protected] --save
    
  2. Импортировать карту и обещание:

    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/toPromise';
    
  3. Добавлен новый оператор импорта:

    import { Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent } from 'rxjs';
    

Ответ 14

Подобные сообщения об ошибках будут появляться при переходе с версии 5 на 6. Вот ответ для изменения на rxjs-6.

Импортируйте отдельных операторов, затем используйте pipe вместо цепочки.

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

source.pipe(
  map(x => x + x),
  delay(4000),
  catchError(err => of('error found')),
).subscribe(printResult);

Ответ 15

Если вы используете angular4, используйте ниже импорта. он должен работать.

импорт 'rxjs/add/operator/map';

Если вы используете angular5/6, тогда используйте map с pipe и импортируйте ниже

import {map} из "rxjs/operator";

Ответ 16

свойство 'map' не существует для типа 'наблюдаемый отклик' angular 6

Решение: Обновите угловой CLI и базовую версию

ng update @angular/cli           //Update Angular CLi 
ng update @angular/core          //Update Angular Core 
npm install --save rxjs-compat   //For Map Call For Post Method