对象中动态密钥的TS接口



我想为这个对象编写合适的接口。步骤的键应该是动态的,并且值是布尔值。这就是目标:

const obj = {
A: {
step: {
a: true,
b: true,
c: true,
},
},
B: {
step: {
a: true,
d: true,
},
},
C: {
step: {
e: true,
f: true,
g: true,
},
},
}

到目前为止,我已经尝试过了,但还是出现了错误。

interface OBJ_INTERFACE {
side: {
step: {
[key: string]: boolean,
}
}
}

您可以提取Step类型并在接口中重用:

type Side = {
step: {
[key: string]: boolean,
}
};
interface OBJ_INTERFACE {
A: Side;
B: Side;
C: Side;
}

游乐场


或者定义映射类型:

type OBJ_INTERFACE = {
[P in 'A' | 'B' | 'C']: {
step: {
[key: string]: boolean,
}
}
}

游乐场

您没有详细说明错误,所以我只能假设它源于尝试这样使用接口:

const obj: OBJ_INTERFACE = {
A: {
step: {
...
}
}
}

在这种情况下,您的接口不会将side属性动态命名为'A' | 'B' | 'C'

尝试使side也具有动态性:

interface OBJ_INTERFACE {
[key: string]: {
step: {
[key: string]: boolean
}
}
}

最新更新