我有一个常量的树状对象来建模嵌套关系,并且正在try 构建一个类型,该类型通过父对象的固定属性为这些关系设置关键字;也就是说,我想获取以下内容:
const tree = {
label: 'root',
leaves: [
{
label: 'root.a',
},
{
label: 'root.b',
leaves: [
{
label: 'root.b.a',
},
],
},
{
label: 'root.c',
leaves: [
{
label: 'root.c.a',
},
{
label: 'root.c.b',
leaves: [
{
label: 'root.c.b.a',
},
],
},
],
},
],
} as const
并推断出如下文字类型:
type KeyedTree = {
"root.a": {},
"root.b": {
"root.b.a": {}
},
"root.c": {
"root.c.a": {},
"root.c.b": {
"root.c.b.a": {}
}
}
}
我到目前为止try 过的示例代码:TypeScript playground.
我设法让类型在特定 node 是否包含子 node 的情况下进行测试,如果包含子 node ,则生成具有正确字符串字面键的Record
类型,但我正在努力将其扩展为遍历整个对象以捕获嵌套 struct (并迭代 node ,而不是使用对索引的硬编码引用).
我觉得它应该像在子 node 上递归地应用MaybeTree
类型一样简单(例如,在运行时参见操场链接的底部)--但我还没有找到一种方法来将其转换到类型系统中.