我有一个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)
});
由于响应明显与接口属性类型不匹配,我希望得到一个打字稿错误,但我能像往常一样访问这些字段。类型安全怎么样,这不是问题吗?
答案 0 :(得分:3)
不是这种情况。编译时的Typescript无法知道来自服务器的响应是否与您提供的接口匹配。所以它不能抛出异常。服务器的响应实际上可能是字符串或文件。 检查此问题的唯一方法是在运行时,实际从服务器获得响应。但在这一点上,没有TypeScript只是普通的JavaScript。
<强>编辑:强>
要做的是,在处理结果时进行类型检查:
for (var o of data.response)
如果在接口响应中将定义为数组,则
将起作用。如果将其定义为数字,则typescript将抛出错误。您还可以访问对象o
及其字段label
和name
。