我在Angular应用程序中接收JSON对象:我想获取一些值,但问题是我无法创建TypeScript接口来匹配这些值,因为对于一个键,该值可以是包含多个键的数组值或简单值(请参阅“关系”)。
一个例子:
{
"ID": "123",
"name": "dummy",
"relations": [
{ "rel": "child", "relValue": ["child1", "child2"] },
{ "rel": "parent", "relValue": "parent"}
]
}
无论有数组还是单个值,如何检索此键的所有元素的值(“关系”)?
答案 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
}
如果不进行检查,由于string
和Array
不共享相同的接口,打字稿会感到困惑。