TypeScript中将rest参数展开传递时报错2556该如何解决?
错误原因
A spread argument must either have a tuple type or be passed to a rest parameter.(2556)
报错核心为参数类型不匹配:
first函数仅支持传入1个数组类型的参数- 对
args执行...展开操作后,相当于传入了N个独立的任意类型参数,和first的入参定义完全不匹配。
解决方案
可以根据你的实际业务逻辑选择对应方案:
- 如果你需要把
test接收到的所有参数整体作为一个数组传给first,直接去掉展开语法即可:
const first = (value: any[]) => { } const test = (...args: any[]) => first(args);
- 如果你希望
first也支持接收任意数量的独立参数,和test的入参形式对齐,修改first的参数为rest形式:
const first = (...value: any[]) => { } const test = (...args: any[]) => first(...args);
- 如果你确认当前写法逻辑无误,仅需要绕开TypeScript校验,可使用类型断言将
args标记为元组类型(该方案不推荐,仅作为临时兜底使用):
const first = (value: any[]) => { } const test = (...args: any[]) => first(...args as [any[]]);
内容的提问来源于stack exchange,提问作者Asking
相关产品推荐
相关产品推荐

