typescript - 如果我为从 API 返回的数据创建接口。我如何处理它可能被改变的可能性?
问题描述
我正在尝试使用从 OpenWeather API 返回数据的简单天气网页来学习打字稿。我已经设置了一个接口来处理返回的数据对象。
我的问题是,如果他们决定更改该对象中的属性名称,我如何在不使用任何类型的情况下捕获它?
interface responseData {
name: string;
main: {
temp: number;
pressure: number;
humidity: number;
}
sys: {
country: string;
sunrise: number
sunset: number
}
weather: {
0: {
description: string;
id: number;
icon: string;
}
}
}
console.log(response.main.temp);
截至目前,console.log() 可以正常工作并记录预期的内容。但是,如果 OpenWeather 决定将“main”更改为“stats”。我该如何解释呢?
解决方案
没有保证。
首先,TypeScript 在运行时不做任何事情,所以这对解决这个问题没有帮助。此外,这个问题本身既罕见又难以避免。
通常公共 API 提供商会在更新版本的 API 中进行更改,这需要不同的 URL 或不同的发送/接收标头等。
如果缺少一个属性,那么你真的无能为力。您不能只是“猜测”代码中替换它的属性。您所能做的就是寻找您需要的东西,如果没有找到,则显示错误消息(或根据场景默默隐藏相关功能)。
如果您不信任此 API 提供程序,您可以将所有属性标记为可选(添加?
到每个属性名称),以便在您的代码中记得手动检查它们,然后由您的代码检查它们的值,并在缺少值时采取行动。
推荐阅读
- c - 如何知道从哪里获取 ac 程序中使用的头文件?
- javascript - 是否可以在 Blade 模板文件中创建 Vue 单文件组件?
- c# - 目录路径的递归
- angular - 如何使用primeng下拉菜单?
- linux - 如何计算shell中不同列之间的值
- sql-server - 在整个存储过程中重用 Where 条件?
- azure-data-explorer - Kusto 范围函数语义错误:'' 有以下语义错误:未解析的引用绑定:XXX"
- python - 为什么 from code import * 与将相同的代码直接输入 REPL 不同?
- python - 如何调用四分位数?
- django - Django:将字段从 Int / Char 更改为 ForgeinKey