【发布时间】:2018-04-05 16:26:14
【问题描述】:
在我的所有服务中,我有 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) => {}' 类型的参数不可分配给 '(value: Response, index: number) => {}'类型的参数。种类 参数“res”和“value”不兼容。 “响应”类型不可分配给“响应”类型。存在具有此名称的两种不同类型,但它们不相关。 “响应”类型中缺少属性“正文”。
我尝试添加括号(),但随后收到:
预期 1 个参数,但得到 0 个。
为什么当方法在同一个类中时它会起作用?
当方法在另一个类中时,我怎样才能使它工作,或者我需要采取不同的方法?
【问题讨论】:
-
不是因为班级。这是因为您在定义共享服务的模块中缺少导入。提示:有一个名为
Response的全局变量
标签: angular typescript