【发布时间】:2023-03-22 05:40:01
【问题描述】:
假设我有一个任意的树类型:
type Tree = {
a: {
b: {
c: "d"
}
}
}
我想让每个树节点成为联合的类型。例如,"f"。换句话说,树应该变成下面这样:
type Tree = {
a: {
b: {
c: "d" | "f"
} | "f"
} | "f"
} | "f"
我的目标是能够使用实用程序类型创建 ^ 这种类型——也许类似于DescendantsUnionedWith<T, F>,其中T 可能是上面的Tree 类型,F 可能是@ 987654328@.
为了解决这个问题,我首先创建了一个通用的ChildrenUnionedWith 类型:
export type ChildrenUnionedWith<O extends object, T> = {
[K in keyof O]: O[K] | T;
};
接下来,我尝试创建递归树深类型:
export type DescendantsUnionedWith<Tree extends object, T> = Tree extends object
? ChildrenUnionedWith<DescendantsUnionedWith<Tree, T>, T>
: Tree | T;
结果当然是循环错误:/
有人知道我可以实现DescendantsUnionedWith 实用程序类型的方法吗?
谢谢!
【问题讨论】:
标签: typescript replace types tree union