ts Property 'map' does not exist on type 'Observable'
ts Property 'map' does not exist on type 'Observable'
我对Angular和npm都是新手,但在学习过程中遇到了一个错误,代码似乎在我尝试复制的源代码上可以工作(链接:这里)。
我猜这与我的开发环境有关,但我无法确切理解为什么。
这是我的代码:
return this.http.get('api/cards.json') .map((response:Response) =>response.json().data) .do(data=>console.log(data)) .catch(this.handleError);
在.map
这一行,Visual Studio Code给了我这个错误:
ts Property 'map' does not exist on type 'Observable'
如果我忽略这个错误并进入浏览器,我会得到相同的消息。
我是用angular-cli
创建的项目,我的Angular版本实际上是2.4.4。服务器正在使用ng serve
工具运行。
我进行了一些搜索:
property map does not exist on observable response in angular --> 我没有使用Visual Studio 2015,而且我的Visual Studio Code已经更新到最新版本(而且似乎这个问题已经解决了一段时间)。
Angular 2 2.0.0-rc.1 Property 'map' does not exist on type 'Observabletsc
,而且我已经执行了npm i typescript -g
(并重新启动了VS code
和ng serve
)。
有什么想法是怎么出错的吗(我猜是某个东西没有更新,但我不知道是什么以及如何更新它)。
问题的原因是在代码中使用了Observable的map方法,但是在类型上却找不到该方法。解决方法是引入RxJs库,并在需要使用map方法的文件中添加对该方法的引用。
在Angular中,使用http.get方法获取数据时,返回的类型是Observable
可以在一个名为rxjs-operators.ts的文件中引入常用的操作符和类型,然后在需要使用这些操作符和类型的文件中引入这个rxjs-operators.ts文件。这样就不需要在每个文件中都重新添加操作符和类型,节省了代码的重复性。
下面是一个示例的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方法(或其他方法)的文件的顶部添加以下代码:
import './rxjs-operators';
这样就可以在该文件中使用.map方法了。
感谢你的提问,我也在学习的过程中遇到了类似的问题,可能是因为太急于测试了。如果上述方法还不能解决你的问题,请再提供一些具体的代码和错误信息,我们可以一起来解决。