注入具有全局功能的服务

时间:2018-04-05 08:21:26

标签: angular typescript

在我的所有服务中,我有2个方法,handleErrors和ExtractData,这违反了DRY原则。

这两种方法:

  private extractData(res: Response) {
    let body = res.json();  
    return body || {};
  }

  private handleErrors(error: any): Observable<any> {
    return Observable.throw(error.json(););
  }

我想让这些方法公开并将它们移动到一个服务,然后我将注入我的所有服务,因此来自:

  getFoo(): Observable<IFoo[]> {
    return this._http.get(FooApi)
      .map(this.extractData)
      .catch(this.handleErrors);
  }

太:

  getFoo(): Observable<IFoo[]> {
    return this._http.get(FooApi)
      .map(this._helperService.extractData)     //<--
      .catch(this._helperService.handleErrors); //<--
  }

我在.map(this._helperService.extractData)收到的错误是:

  

类型的参数'(res:Response)=&gt; {}'不可分配给   参数类型'(值:响应,索引:数字)=&gt; {}”。种类   参数'res'和'value'不兼容。       “响应”类型不能分配给“响应”类型。存在两种具有此名称的不同类型,但它们是不相关的。         “响应”类型中缺少属性“body”。

我尝试添加括号(),但后来收到:

  

预期1个参数,但得到0。

当方法属于同一类时,为什么它可以工作? 当方法在另一个类中时,我怎样才能使它工作,或者我需要采取不同的方法?

1 个答案:

答案 0 :(得分:1)

import { Response } from '@angular/http';添加到您的帮助程序服务。

目前,帮助程序服务使用lib.dom.d.ts Response接口。