我有一个以这种方式定义的函数:
function create(element1: number, ...otherElements: any[]) {
// Do something
return makeSomething(...otherElements)
}
function makeSomething(a: string, b: number, c: IElements) {
// Do something
}
TypeScript抱怨我传递给makeSomething
错误TS2346:提供的参数与任何调用签名都不匹配 目标
在使用扩展语法的同时定义此类内容的正确方法是什么?
由于
答案 0 :(得分:4)
这里的一个问题是,Typescript不知道...otherElements: any[]
中有多少项。即使项目类型(makeSomething
)对参数有效,也无法保证将有3个项目传递给any
。
你可以通过告诉它实际上有3个元素来解决这个问题:
function create(element1: number, ...otherElements: any[]) {
// Do something
const [a, b, c] = otherElements;
return makeSomething(a, b, c)
}
这允许您添加缺失的默认值,错误检查等,但最重要的是,有三个显式元素满足类型检查。
如果你想传递其余的参数,只需在destructure中添加一个rest参数:
function create(element1: number, ...otherElements: any[]) {
// Do something
const [a, b, c, ...d] = otherElements;
return makeSomething(a, b, c, ...d)
}