我正在尝试创建一个http请求并执行映射。map angular2:参数类型与参数不匹配
我遵循角度文档,但由于某种原因,我在地图函数:“参数类型不匹配参数”出错。请注意我已经输入'rxjs/add/operator/map';
。
我需要npm install
什么吗?
我使用Angular 4.0.2
,rxjs 5.0.1
和WebStorm 2016.1.3
这里是我的代码:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import {Observable} from "rxjs/Observable";
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
@Injectable()
export class ApiService {
constructor(private http: Http) {
}
public getValue() : Observable<any> {
return this.http.get('')
.map(this.extractData)
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
private extractData(res: Response) {
let body = res.json();
return body.data || { };
}
}
UPDATE:
因为某些原因:更改为.map().map(this.extractData)
解决的问题。 这里是map.d.ts
定义:
import { map } from '../../operator/map';
declare module '../../Observable' {
interface Observable<T> {
map: typeof map;
}
}
我会很高兴,如果有人能解释为什么。
更新2:
恢复到.map(this.extractData)
没有.map()
似乎正在运行的项目时,工作!可能是由webstorm IDE产生的错误。
你的解决方案是一个糟糕的想法.... Typescript编译器错误通常是警告,你可能混合了你不明确混合的东西。你确定你的错误是与原始的'地图'功能?如果你删除了“地图”,错误消失了吗?或者如果您临时更改extractData函数以接受'any'作为其参数,那么Typescript错误消失了吗? – snorkpete
@snorkpete如果我删除地图()然后我得到一个错误。此外,更改提取数据以接受“res:any”而不是“res:Response”仍然会产生相同的错误 – ohadinho
当您删除'map'时,您是否得到相同(原始)错误或不同的错误? – snorkpete