【发布时间】:2021-07-28 06:11:35
【问题描述】:
编辑:这个功能是作为 TypeScript 4.1 的一部分提供的,就像 @jcalz 提到的那样。
我想做一个接受元组并遍历它的泛型类型。我的第一种方法是递归,但我得到了Type alias 'YourOperator' circularly references itself.。这是我尝试过的最简单的例子
type VariadicAnd<T extends any[]> = T extends [infer Head, ...infer Tail] ? Head & VariadicAnd<Tail> : unknown
在我的具体情况下,我还想通过将Head 传递到另一个泛型类型中来对其进行转换。例如:
type SimpleTransform<T> = { wrapped: T }
type VariadicAndWithTransform<T extends any[]> = T extends [infer Head, ...infer Tail]
? SimpleTransform<Head> & VariadicAndWithTransform<Tail>
: unknown;
有趣的是,我的 IntelliSence 可以正确解析类型,但 typescript 编译器拒绝接受它。我想知道是否有另一种方法,或者是否有办法让我的递归工作。
【问题讨论】:
-
我无法重现您的错误,请参阅this Playground link。 TypeScript 从 4.1 版开始支持recursive conditional types;您使用的是旧版本的语言吗?如果是这样,您应该升级。如果不能,您应该说明您对 TS 版本号的要求。肯定有一种非递归的方法,但我喜欢有一个好的minimal reproducible example,所以我不会花太多时间去追查结果证明不是问题的东西。
-
@jcalz 感谢您的反馈!是的,你是对的,我将更新我的问题以指定这已在最新版本的打字稿中得到修复。感谢分享游乐场链接!了解我的问题非常有用。出于好奇,还有什么替代方案?
标签: javascript typescript recursion tuples typescript-generics