仅为对象的某些属性创建类型

时间:2020-04-24 00:28:19

标签: typescript

是否有一种方法只能为对象的某些属性指定类型,而不是全部?例如,如果我有一些像

的对象
const user_account = {id: 37593, created: "23/04/2020", last_active: "23/04/2020"};

,我只想指定id的类型为number,而其他所有内容都保留为any,有没有办法做到这一点?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用 string index signature来表示所有属性都符合特定的值类型。就您而言,any。您添加到索引签名之外的对象的任何命名属性都必须仍然符合该类型,但是您可以使其更加具体。由于numberany更具体,因此您可以像{ [k: string]: any; id: number }这样表示您的类型。

所以

const settings: { id: number, [k: string]: any } = 
  {id: 37593, created: "23/04/2020", last_active: "23/04/2020"};

应该为您服务,具体取决于您的用例。请注意,这样的注释会将settings的类型扩展为带注释的类型,因此编译器将不会记住该类型中未指定的任何内容:

settings.id; // known to be number
settings.created; // only known as any, not string
settings.randomPropName; // also known as any

好的,希望能有所帮助;祝你好运!

Playground link to code