我是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, []>