【发布时间】:2020-05-26 20:29:42
【问题描述】:
TypeScript 允许您组合递归类型,但无法深入了解代码在较低级别(即深度)中如何变化。例如,下面的代码在所有级别都具有相同类型的签名,我们必须在每个级别手动检查是否存在 sub 属性。
type Recurse = { foo: string; sub?: Recurse }
function recurse(depth: number): Recurse {
if (depth === 0) return { foo: 'hey' }
return {
foo: 'hey',
sub: recurse(depth - 1),
}
}
const qux = recurse(5)
我正在寻找的是一个类型签名,它可以为我们提供函数在特定深度返回的具体证据。
const qux0: { foo: string } = recurse(0)
const qux1: { foo: string, sub: { foo: string } } = recurse(1)
const qux2: { foo: string, sub: { foo: string, sub: { foo: string }} } = recurse(2)
这样,我们不必在每个级别检查 sub 属性,因为类型签名已经打包了该信息。
我觉得这可以通过条件类型实现,但没有具体证据。
你知道我是怎么做到的吗?
【问题讨论】:
标签: typescript recursion types