angular 4 httpclient - 接口强制执行的http响应对象类型

时间:2017-11-10 08:20:35

标签: angular typescript

我有一个API端点,它返回以下响应:

{
  "response": [ { "label": "mylabel", "name": "myname" } ],
  "status": 200
}

首先我创建了一个与这个确切结构匹配的接口,但是,为了测试,我把它更改为:

export interface ListResponse {
    response: number;
    status: boolean;
}

this.http.get<ListResponse>('/api/list.php').subscribe(data => {
    console.log(data.response)
    console.log(data.status)
});

由于响应明显与接口属性类型不匹配,我希望得到一个打字稿错误,但我能像往常一样访问这些字段。类型安全怎么样,这不是问题吗?

1 个答案:

答案 0 :(得分:3)

不是这种情况。编译时的Typescript无法知道来自服务器的响应是否与您提供的接口匹配。所以它不能抛出异常。服务器的响应实际上可能是字符串或文件。 检查此问题的唯一方法是在运行时,实际从服务器获得响应。但在这一点上,没有TypeScript只是普通的JavaScript。

<强>编辑:
要做的是,在处理结果时进行类型检查:

for (var o of data.response)
如果在接口响应中将

定义为数组,则

将起作用。如果将其定义为数字,则typescript将抛出错误。您还可以访问对象o及其字段labelname