我是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 code
和ng serve
知道出了什么问题(我想某些事情不是最新的,但我不知道如何更新它)。
答案 0 :(得分:5)
您必须引用模块/组件/服务中的RxJs
库(您在此处编写的任何内容)作为Observable
(从{{返回的类型) 1}})是该库的一部分。 http.get
有许多运算符,您可以使用RxJs
,map
,catch
等,但为了使用这些运算符,您必须引用它们包含的文件/模块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