【问题标题】:Angular4 and TypeScript compile error TS2453Angular4 和 TypeScript 编译错误 TS2453
【发布时间】:2017-09-30 12:55:52
【问题描述】:

由于我真的不明白那个错误,我无法构建我的 Angular4 项目。我有来自@angular 的响应、标头、Http 之类的导入。当我尝试构建我的项目时,出现此错误:

TS2453:无法从用法推断类型参数“T”的类型参数。考虑明确指定类型参数。 类型参数候选“响应”不是有效的类型参数,因为它不是候选“响应”的超类型。 属性“类型”的类型不兼容。 类型“字符串”不可分配给类型“响应类型”。

指的是这段代码:

public getPatients(): Observable<any> {
    //noinspection TypeScriptValidateTypes
    return this.http.get(AppSettings.API_ENDPOINT + 'patient', { headers: this.getHeaders() })
        .map((res:Response) => res.json())
        .catch((error) => Observable.throw(error.json().error || "Server error"));
}

我找到了一种导入的解决方法,并添加了这些线程中提到的所有内容,但它仍然没有帮助。

【问题讨论】:

  • 您能否拆分您的 return 语句,为http.get().map() 引入一个变量,并告诉我们哪一行产生了错误?我怀疑catch()的返回值的推断类型。

标签: angular typescript


【解决方案1】:

我有同样的问题,我发现问题是我没有导入正确的东西。

尝试使用这些:

import {Http, Response} from "@angular/http";
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch';
import {Observable } from "rxjs/Observable";

【讨论】:

    【解决方案2】:

    如果有这样的代码:

    editItem(item: Item) {
        return this.http.put(`${this.BACKOFFICE_URL}`, item, this.getOptions())
            .map((res: Response) => {
                return res.status === 200 ? res.json() : {};
            })
            .catch((error: any) => {
                return Observable.throw(error);
            })
    }
    

    我看到的与您的代码的唯一区别是我没有为函数添加返回类型。

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 2017-11-12
      • 1970-01-01
      • 2019-09-22
      • 2017-04-02
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 2016-04-02
      相关资源
      最近更新 更多