【问题标题】:How to define a completely unknown incoming JSON field in a type?如何在类型中定义一个完全未知的传入 JSON 字段?
【发布时间】:2023-01-12 03:43:37
【问题描述】:

我有来自后端的模型,其元数据字段可以是任何有效的 JSON,没有保证模式:

{
  "unknown_field" : "Apple",
  "unknown_field_2" : 13
}

我正在尝试编写一个类型来接受这个:

type MyModel{
   id : string
   name : string
   metadata : {} // <- obviously not working
}

在这里定义元数据的正确方法是什么?我搜索的示例不断建议定义一个带有可选字段的已知模式,这不是我所拥有的。

编辑:

metadata : {} 不起作用并给出此消息:

“不要使用‘{}’作为类型。‘{}’实际上意味着任何非空值”

【问题讨论】:

  • 你能比仅仅说你的类型定义不起作用更具体吗? metadata: {} 应该允许任何对象作为值,这似乎是你想要的。
  • 更新了我使用metadata : {} 得到的消息。我同意,直觉上这应该是我想要的。
  • 谢谢!发布了解释该错误消息的答案

标签: typescript


【解决方案1】:

如果它真的可以是任何东西,你唯一的选择是使用 any 类型。

如果你得到一些字典,你可以尝试将它缩小到这样的范围:

metadata: { [key:string]: any }

这至少表明你正在处理在第一级有钥匙的东西

【讨论】:

    【解决方案2】:

    你在使用 ESLint 吗?默认情况下,您的类型定义似乎是有效的,除了缺少一些符号:

    type MyModel = {
      id: string;
      name: string;
      metadata: {};
    }
    

    您可以配置 ESLint 以忽略此规则(请参阅答案here)。

    或者,尝试使用以下任一类型:

    type MyModel1 = {
      id: string;
      name: string;
      metadata: object;
    }
    
    type MyModel2 = {
      id: string;
      name: string;
      metadata: { [key: string]: any };
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多