typescript - Typescript - 如何键入对象的未知属性?
问题描述
假设有一个变量resp
从服务器接收响应:
const resp = await ServerResponse();
我确定响应具有一个ready: boolean
属性:
console.log(resp);
/**
* {
* "ready": true
* }
*/
但是可能有可选参数,具体的类型我不知道
console.log(resp);
/**
* {
* "ready": true,
* "_startAt": 1234567890
* }
*/
我应该如何输入这个?
interface R {
ready: boolean;
//...args: any; //something like this
}
const resp: R = await ServerResponse();
或者还有另一种方式,不给any
变量resp
,这样访问未知属性时,TS不发誓?
解决方案
好吧,我们可以将索引属性的值设为松散类型any
interface R{
name: string;
age: number;
[prop: string]: any; // but this defeats the purpose of providing good typing.
}
另一种方法是使 additionalProperties 成为 Dictionary
interface R {
name: string;
age: number;
additionalProperties: { [prop: string]: string};
}
更多你也可以在这里检查 Typescript 接口,用于具有一些已知和一些未知属性名称的对象
推荐阅读
- html - 使用 sortable() 时无法对框进行排序
- python - 在python中,如何在不替换特定列的情况下生成随机抽样?
- arrays - 在映射函数之后遍历数组中的每个属性,然后返回新数组
- backend - 当后端服务器之一关闭时,haproxy 能否确保对后端服务器的每次调用都成功?
- tensorflow - ValueError: GRU(reset_after=False) 与 GRU(reset_after=True) 不兼容
- java - Azure Active Directory LDAP 密码更改
- nuxt.js - nuxt js 从服务器端访问组件数据
- gremlin - Tinkerpop 选择多个按顶点分组的邻居,它们是具有范围步长的邻居
- node.js - 授予节点 js 中 google drive api v3 上现有文件的权限
- apache-spark - 当行展平逻辑中存在错误/异常时,使用 Flatmap 函数跳过 Spark 数据集中的特定行