map angular2:参数类型与参数不匹配

时间:2017-04-17 09:38:39

标签: angular

我正在尝试发出http请求并执行地图。

我遵循了角度文档,但由于某种原因,我在地图功能上遇到错误:“参数类型与参数不匹配”。请注意我已导入'rxjs/add/operator/map';

我需要npm install某事吗?

我正在使用Angular 4.0.2rxjs 5.0.1WebStorm 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 || { };
      }
    }

更新

由于某种原因:更改为.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生成的错误。

2 个答案:

答案 0 :(得分:0)

您确定错误出现在typedef enum ObjectType { type_node, type_int, type_error, } ObjectType; typedef struct { ObjectType type; void * value; } TypedObject; typedef struct { bool operator() (const TypedObject *lhs, const TypedObject *rhs){ return (lhs->type==rhs->type) && (lhs->value<rhs->value); } } ObjComparator; int main() { std::set<TypedObject *, ObjComparator> mySet; TypedObject obj; obj.type=type_int; obj.value=(void*)new int; //*(obj.value)=4; auto insert = mySet.insert(&obj); std::cout<<insert.second<<std::endl; if(mySet.find(&obj) == mySet.end()) { std::cout<<"Not Found..."<<std::endl; } else { std::cout<<"Found..."<<std::endl; } return 0; } 声明中吗?

IMO这一行:

map
由于缺少URL(return this.http.get('') ),

会抛出错误,而是会调用它:

''

如果这是问题,那么检查.catch((error:any) => Observable.throw(error.json().error || 'Server error')); 的签名,它会将异常作为第一个参数。我认为应该是:

Observable.throw

我希望这会有所帮助

答案 1 :(得分:0)

您没有向extractData提供任何输入参数。更改为.map((data) => this.extractData(data))或该行的某些内容。