Angular 2 beta.17:Property&#39; map&#39;在类型&#39; Observable <response>&#39;

时间:2016-04-29 21:31:42

标签: typescript angular rxjs

我刚刚从Angular 2 beta16 升级到 beta17 ,后者又需要rxjs 5.0.0-beta.6。 (更改日志:https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta17-2016-04-28)在beta16中,所有关于Observable / map功能的都很好。升级后出现以下错误,当打字稿尝试转换时出现:

  
      
  1. 地产&#39;地图&#39;在类型&#39; Observable&#39;中不存在(我在地图中使用可观察的地图)
  2.   
  3. c:/path/node_modules/rxjs/add/operator/map.d.ts(216):error TS2435:Ambient模块不能嵌套在其他模块或名称空间中。
  4.   
  5. c:/path/node_modules/rxjs/add/operator/map.d.ts(2,16):错误TS2436:环境模块声明无法指定相对模块名称。
  6.   

我已经看到了这个问题/答案,但它没有解决问题:Observable errors with Angular2 beta.12 and 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
]);

有人知道发生了什么事吗?

16 个答案:

答案 0 :(得分:284)

您需要导入map运算符:

import 'rxjs/add/operator/map'

答案 1 :(得分:78)

我将我的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类型,如下所示: enter image description here

更多关于Angular的输入安装:https://angular.io/docs/ts/latest/guide/typescript-configuration.html#!#typings

答案 2 :(得分:65)

Rxjs 5.5“Observable类型中不存在属性'map'。

问题与您需要在所有运营商周围添加管道有关。

改变这一点,

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

到这个

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

像这样导入地图,

import { map } from 'rxjs/operators';

它将解决您的问题。

答案 3 :(得分:41)

在我的情况下,仅包括地图和承诺是不够的:

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

我通过导入几个rxjs组件解决了这个问题,因为official documentation建议:

1)在一个app / rxjs-operators.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';

答案 4 :(得分:26)

如果您碰巧在VS2015中看到此错误,那么就会出现github问题&amp;这里提到的解决方法:

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

这确实帮助我解决了property map does not exist on observable问题。 此外,请确保您的打字稿版本高于1.8.2

答案 5 :(得分:25)

针对那些使用角度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;

带有打字稿V 2.3.4.0的Angular6

答案 6 :(得分:14)

import 'rxjs/add/operator/map';

&安培;

npm install rxjs@6 rxjs-compat@6 --save

为我工作

答案 7 :(得分:12)

在Angular 2x中

在example.component.ts

import { Observable } from 'rxjs';

在example.component.html

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

在Angular 5x或Angular 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'));

答案 8 :(得分:10)

2016年9月29日更新Angular 2.0 Final&amp; VS 2015

不再需要解决方法,只需install TypeScript version 2.0.3即可修复。

修正了this github issue comment上的修改。

答案 9 :(得分:9)

据我了解,这是由于rxjs的最新更新。他们更改了一些运算符和语法。此后,我们应该像这样导入rx运算符

import { map } from "rxjs/operators";

代替此

import 'rxjs/add/operator/map';

我们需要像这样在所有运算符周围添加管道

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

来源是here

答案 10 :(得分:8)

Justin Scofield在他的回答中建议,对于Angular 5的最新版本和Angular 6,与2018年6月1日一样,只有import 'rxjs/add/operator/map';不足以消除TS错误: [ts] Property 'map' does not exist on type 'Observable<Object>'.

必须运行以下命令来安装所需的依赖项: npm install rxjs@6 rxjs-compat@6 --save之后map导入依赖性错误得到解决!

答案 11 :(得分:7)

看起来最新的RxJS需要typescript 1.8,因此typescript 1.7报告了上述错误。

我通过升级到最新的打字稿版本解决了这个问题。

答案 12 :(得分:7)

我遇到了类似的错误。当我完成这三件事时,它就解决了:

  1. 更新到最新的rxjs:

    npm install rxjs@6 rxjs-compat@6 --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';
    

答案 13 :(得分:6)

从版本5转换到6时,会弹出类似的错误消息。以下是rxjs-6更改的答案。

导入各个运算符,然后使用core/sys/clock.h而不是链接。

pipe

答案 14 :(得分:4)

如果您使用angular4,请在导入以下使用。它应该可以工作。

导入'rxjs / add / operator / map';

如果您使用的是angular5 / 6,则将map与管道配合使用,并在一个以下导入

从“ rxjs / operators”导入{map};

答案 15 :(得分:0)

类型为“可观察到的响应”角度6的属性“地图”不存在

解决方案: 更新Angular 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