gpt4 book ai didi

TypeScript 3.7 递归类型给出 "type instantiation is excessively deep and possibly infinite"

转载 作者:行者123 更新时间:2023-12-03 13:05:45 25 4
gpt4 key购买 nike

我正在尝试编写一个可变参数 pipe 函数,它由任意数量的单参数纯函数组成。此类型应检查一个函数的返回类型是否为下一个函数的参数类型,依此类推。

我希望它能在引入递归类型的 TypeScript 3.7 中工作,但不知何故它不起作用并给出错误:

TS2589:类型实例化过深且可能无限

这是我的代码:

type Tail<T extends any[]> = ((...t: T) => void) extends ((x: any, ...u: infer U) => void) ? U : never;

type Pipe<FNS extends unknown[]> = FNS extends [(a: infer A) => infer B, (b: infer B) => infer C] ? C :
FNS extends [(a: infer A) => infer B, (b: infer B) => infer C, Pipe<[...Tail<FNS>[]]>] ? C : never;

FNS 类型表示纯函数数组,Tail 类型应确保仅返回此数组的尾部,但编译器仍将其标记为无限循环。

使用示例:

const numToString = (n: number): string => n.toString();
const toUpper = (s: string): string => s.toUpperCase();

// this works, Foo evaluates to string
type Foo = Pipe<[typeof numToString, typeof toUpper]>;

// this doesn't work, Foo is not evaluated
type Foo = Pipe<[typeof numToString, typeof toUpper, typeof toUpper]>;

错误在这部分:

Pipe<[...Tail<FNS>[]]>

为什么是无限的?我错过了什么?

最佳答案

可变类型在未来roadmap而不是 3.7 的一部分。

这是一个备受期待的功能,它将真正实现函数式编程

typescript https://github.com/Microsoft/TypeScript/issues/5453

关于TypeScript 3.7 递归类型给出 "type instantiation is excessively deep and possibly infinite",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com