两个泛型组合在类型实例化上的结果过于深刻,可能是无限的.(2589)



我是Typescript的新手,我需要一些帮助来修复错误Type instantiation is excessively deep and possibly infinite.(2589)

操场在这儿。

若要查看错误,请取消注释类型ExpandThrowAnError

背景。

我创建了两个泛型来帮助我进行API定义。API返回的每个对象都可以有一些键,如果请求过程中需要,可以扩展这些键。

因此,通用KeysCanBeExpanded帮助我获得对象上所有可以扩展的密钥,Expand帮助我用传递给它的密钥扩展对象

另外,正如你在操场上看到的那样,这两个泛型的工作方式很有魅力,但如果我把它们结合在一起,编译器就会开始抱怨并告诉Type instantiation is excessively deep and possibly infinite.(2589)

解决方案是逐步计算导致问题的类型:

发件人:

type ExpandWithError<T extends Base, K extends KeysCanBeExpanded<T, N> = never, N extends number = 4> = Expand_<T, SplitWithAllPossibleCombinations<K extends string ? K : '', '.'>, '', N, []>

收件人:

type Expand<T extends Base, K extends KeysCanBeExpanded<T, N> extends infer R ? R : never = never, N extends number = 4> = Expand_<T, SplitWithAllPossibleCombinations<K extends string ? K : '', '.'> extends infer Ko ? Ko: '', '', N, []>

最新更新