打字稿嵌套对象结构条件/递归类型
我有以下类型:
type Config = {
key: string,
label?: string,
value?: any,
}
我希望能够通过这些“配置”的深度嵌套对象解析。类似的内容:
feature1: {
field1: {
key: `field1`,
},
field2: {
key: `field2`,
},
},
feature2: {
group1: {
field: {
key: `group1_field`,
},
},
group2: {
field: {
key: `group2_field`,
},
},
},
feature3: {
group1: {
subgroup1: {
field: {
key: `group1_subgroup1_field`,
},
},
subgroup2: {
field: {
key: `group1_subgroup2_field`,
},
},
},
},
配置可以出现在对象中的任何深度。
我将如何编写打字稿类型来处理此结构?
到目前为止,我一直在玩这个代码:
type Config = {
key: string,
label?: string,
value?: any,
}
type ConfigMapping = {
[key: string]: Config
}
export type NestedConfig<T> = T extends Config ? Config : {
[K in keyof T]:
T[K] extends (infer U)[] ? NestedConfig<U>[] :
NestedConfig<T[K]>;
}
这尚未按照我想要的方式工作。我有点不清楚如何创建此嵌套类型。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于您只想递归地对
config
节点类型有限制,因此我们可以使用nconfig类型别名 -Code Playground
Since you only want to recursively have constraint for
Config
node type, We can do it with NConfig type alias -Code Playground