【发布时间】:2019-07-30 08:32:34
【问题描述】:
在下面的代码中
const f = <
Args extends any[] = never
>(...args: Args) => {
const foo: [number, number, ...Args] = [0, 0, ...args]
}
tsc 不喜欢 [number, number, ...Args],尽管我认为我将类型限制为带有 Args extends any[] 的数组
我收到这个错误
剩余元素类型必须是数组类型
【问题讨论】:
-
我认为泛型类型参数不满足“必须是数组类型”的约束。在一般情况下,不要认为有解决这个问题的好方法。你能否提供一个更大的例子来说明你想用
foo做什么,需要将Args传播到foo -
@TitianCernicova-Dragomir 但它适用于函数参数类型上下文
-
@zerkms 不是 100% 确定你的意思。如果您指的是在调用站点获得数组类型的事实,那是正确的,但是当所有类型都已知而不仅仅是受约束的类型参数时,编译器通常可以做更多的事情
-
@TitianCernicova-Dragomir 我的意思是看起来不一致,
(...args: Args)可以用于其余的参数,但对于...Args的其余数组解构则不行。 -
@AliHabibzadeh 我没有投反对票
标签: typescript