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

标签 angular typescript

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

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

起初我创建了一个与这个结构完全匹配的接口(interface),但后来,为了测试,我把它改成这样:

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

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

由于响应显然与接口(interface)属性类型不匹配,我原以为会收到 typescript 错误,但我能够像往常一样访问这些字段。类型安全呢,这不是个问题吗?

最佳答案

在这种情况下不是。编译器时的 typescript 无法知道服务器的响应是否与您提供的接口(interface)匹配。所以它不能抛出异常。来自服务器的响应实际上可以是字符串或文件。 检查这个的唯一方法是在运行时,当您实际从服务器获得响应时。但目前还没有 TypeScript,只有纯 JavaScript。

已编辑:
这样做的目的是,在处理结果时进行类型检查:

for (var o of data.response)

如果在接口(interface)中将响应定义为数组,则将起作用。如果定义为数字, typescript 将抛出错误。您还可以访问对象 o 及其字段 labelname

关于angular 4 httpclient - 接口(interface)未强制执行的http响应对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47218390/

相关文章:

angular - 以模型驱动形式设置 primeng 下拉列表的值

javascript - 将样式应用于 Angular 2 中动态创建的元素

javascript - 使用 typescript 中的 javascript,使用 webpack 进行捆绑。运行时错误

javascript - 导出时输入 "only refers to a type, but is being used as a value here"

javascript - TypeScript:我可以混合使用 "import * from"和 "require(*)"

javascript - 如何根据 Promise 值包装循环和 Promise 和 Break 循环

javascript - 渲染 formio 自定义组件不工作

angular - EventEmitter<undefined> 和 EventEmitter<void> 有什么区别?

angular - 使用 Angular 的插值来处理 data-tippy-content

javascript - Google reCaptcha 验证弹出窗口未在 Mat Dialog 中正确显示