【问题标题】:In Typescript, how do you type an object when it's properties are not know beforehand?在 Typescript 中,当事先不知道对象的属性时,如何键入对象?
【发布时间】:2021-01-11 09:10:09
【问题描述】:

我对打字稿比较陌生,所以如果我遗漏了一些明显的东西,请原谅我。我正在使用带有 ReactJS 的 typescript,并且正在尝试为 API 响应定义类型。

API 文档说有一个 meta 属性,它是一个对象,但它的键/值无法预测。即

{
  ...
  meta: {
    property1: value1 //(can be string/number/array)
    property2: value2
    .
    .
    .
    propertyN: valueN
  }
}

如何有效地输入?当我尝试{ meta: object } 时,我的 eslint 抱怨,所以我认为这不好。

【问题讨论】:

  • 你可以使用anyunknown作为类型;一般情况下,unknown 的限制性更强,如果您正在考虑使用any,请先尝试使用unknown

标签: reactjs typescript api types axios


【解决方案1】:

由于您不知道它将包含什么,除了它将成为一个对象之外,您可以使用:

{ [key: string]: unknown };

这并不完全有效 - 您必须对每个属性值进行进一步的显式类型缩小,但至少它的类型是 safe(不像 any) .

【讨论】:

    【解决方案2】:

    如果你知道它can be string/number/array,就这样定义它:

    type MetaType = { [key: string]: string | number | any[] };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-19
      • 2013-04-12
      • 1970-01-01
      • 2021-02-28
      • 2012-05-28
      • 2023-03-17
      • 2021-01-04
      • 1970-01-01
      相关资源
      最近更新 更多