我有这样的深层嵌套对象(超过3个级别):
{
a1: 'foo1',
b1: [
{
c2: 'foo2',
d2: [
{
e3: 'foo3',
f3: 'foo3'
},
{
e3: 'bar3',
f3: 'bar3' }
]
}
]
};

我已经创建了嵌套接口,如下所示:
export interface Level3 {
e3: string;
f3: string;
}
export interface Level2 {
c2: string;
d2: Level3[];
}
export interface Level1 {
a1: string;
b1: Level2[];
}

我将最深层嵌套的对象转换为其他对象,同时保持上层结构的所有内容不变。例如:
export interface Level3Transformed {
e3Transformed: number[];
f3Transformed: number[];
}
export interface Level3 {
e3: string;
f3: string;
}

当我声明Level1Transformed
接口与Level1
相同但有Level3Transformed
而不是Level3
时,是否有任何方法可以重复使用所有接口之间(如Level2
)?
或者是否有其他一些智能方法来构建/声明类似的嵌套对象,同时避免大量重复的接口?
编辑:不使用OR运算符?
答案 0 :(得分:2)
export interface Level2 {
c2: string;
d2: Level3[] | Level3Transformed[];
}
或者您可以使用泛型类型:
export interface Level2<T> {
c2: string;
d2: T[];
}
export interface Level1<T> {
a1: string;
b1: Level2<T>[];
}
然后
Level1<Level3>
或
Level1<Level3Transformed>
答案 1 :(得分:2)
您只需在OR operator
level2
即可
export interface Level2 {
c2: string;
d2: Level3[] | Level3Transformed[];
}
这样,您的level1
类型对象将为level3
或level3transformed
类型。
答案 2 :(得分:1)
您可以使用模板类型,例如:
export interface Level3<T> {
e3: T;
f3: T;
}
export interface Level2<T> {
c2: string;
d2: Level3<T>[];
}
export interface Level1<T> {
a1: string;
b1: Level2<T>[];
}
然后您可以Level1<string>
或Level1<number[]>
。
如果您想更改Level3
中的属性名称,则可以将整个Level3
作为模板类型传递至Level2
。
请注意,您还可以为T
定义默认值,例如export interface Level1<T=string>
,那么您只能使用Level1
作为字符串版本,或Level1<number[]>
作为修改后的版本。