ts'Observable <response>'类型中不存在属性'map'

时间:2017-01-24 16:52:17

标签: javascript angularjs typescript npm visual-studio-code

我是angular和npm的新手,但是在学习的过程中,我遇到了一个错误,代码似乎对我正在尝试重现的源代码有效(here)。

我认为这与我的开发环境有关,但我无法理解为什么。

这是我的代码:

return this.http.get('api/cards.json')
 .map((response:Response) => <Card[]>response.json().data)
 .do(data=>console.log(data))
 .catch(this.handleError);

.map上,Visual Studio Code给出了这个错误:

  

ts'Observable'

类型中不存在属性'map'

如果我忽略此错误并转到浏览器,我会收到相同的消息。

我用angular-cli创建了我的项目,而我的角度版本实际上是2.4.4。服务器正在使用ng serve工具运行。

我做了一些搜索:

property map does not exist on observable response in angular - &gt;我没有使用visual studio 2015,而且,我已经使用了我的Visual Studio代码(似乎这个bug已经解决了一段时间)。

Angular 2 2.0.0-rc.1 Property 'map' does not exist on type 'Observable<Response>' not the same as issue report - &gt;我的命令行对tsc以及完成npm i typescript -g之后的任何事情一无所知(并重新启动了VS codeng serve

知道出了什么问题(我想某些事情不是最新的,但我不知道如何更新它)。

1 个答案:

答案 0 :(得分:5)

您必须引用模块/组件/服务中的RxJs库(您在此处编写的任何内容)作为Observable(从{{返回的类型) 1}})是该库的一部分。 http.get有许多运算符,您可以使用RxJsmapcatch等,但为了使用这些运算符,您必须引用它们包含的文件/模块in。

角度网站上的教程很好地解释了如何使用do以及如何创建引用映射到您想要使用的更常用的方法,如Observable<T> lib中的map。通过创建一个单独的文件,引用RxJs库中更常用的运算符和类型,您只需要引用那个您想要使用这些类型的引用文件,从而节省必须重新添加所有运算符/在您希望利用它们的项目中的每个文件中键入。

以下是一个示例文件(本例中名为RxJs),其中包含一些常用的方法。

rxjs-operators.ts

要在文件的顶部使用// Observable class extensions import 'rxjs/add/observable/of'; import 'rxjs/add/observable/throw'; // Observable operators import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/debounceTime'; import 'rxjs/add/operator/distinctUntilChanged'; import 'rxjs/add/operator/do'; import 'rxjs/add/operator/filter'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/switchMap'; (或任何其他方法)添加此行。

.map