首页 > 解决方案 > 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不发誓?

标签: typescript

解决方案


好吧,我们可以将索引属性的值设为松散类型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 接口,用于具有一些已知和一些未知属性名称的对象


推荐阅读