处理包含数组或值的JSON属性

时间:2019-02-21 13:08:39

标签: json angular typescript

我在Angular应用程序中接收JSON对象:我想获取一些值,但问题是我无法创建TypeScript接口来匹配这些值,因为对于一个键,该值可以是包含多个键的数组值或简单值(请参阅“关系”)。

一个例子:

{
  "ID": "123",
  "name": "dummy",
  "relations": [
      { "rel": "child", "relValue": ["child1", "child2"] },
      { "rel": "parent", "relValue": "parent"}
  ]
}

无论有数组还是单个值,如何检索此键的所有元素的值(“关系”)?

2 个答案:

答案 0 :(得分:5)

这是您可以使用的类型

type Type = {
    ID: string,
    name: string,
    relations: Array<Record<string, string | string[]>>,
}

或更精确

type Type = {
    ID: string,
    name: string,
    relations: Array<{ rel: string, relValue: string | string[] }>,
}

答案 1 :(得分:2)

如果可以的话,我建议不要使用这样的数据结构,但是如果您坚持使用它,则可以使用Union类型使用下面的界面。

interface Relations {
    ID: string;
    name: string;
    relations: string | Array<string>
}

我建议您反对这种结构的原因是,如果您想使用relations,则必须检查如下类型:

var rel: Relations = ...;
if (rel.relations instanceof Array) {
    //use rel.relations as an array (of string)
}
else {
    //use rel.relations as a string
}

如果不进行检查,由于stringArray不共享相同的接口,打字稿会感到困惑。

相关问题