javascript - Spread rest med TypeScript klager over signaturen på opkaldsmål
Jeg har en funktion defineret på denne måde:
function create(element1: number, ...otherElements: any[]) {
// Do something
return makeSomething(...otherElements)
}
function makeSomething(a: string, b: number, c: IElements) {
// Do something
}
TypeScript klager over de parametre, jeg sender til makeSomething
fejl TS2346: Leverede parametre matcher ingen signatur af kaldemålet.
Hvad er den rigtige måde at definere sådan en ting på, mens man stadig bruger spread-syntaksen?
Tak
Svar #1
Et af problemerne her er, at Typescript ikke har nogen idé om, hvor mange elementer der er i ...otherElements: any[]. Det kan ikke garantere, at der vil være 3 elementer at sende til makeSomething, selvom elementtypen (any) ville være gyldig for argumenterne.
Du kan let arbejde uden om det ved at fortælle det, at der faktisk er 3 elementer:
function create(element1: number, ...otherElements: any[]) {
// Do something
const [a, b, c] = otherElements;
return makeSomething(a, b, c)
}
Dette giver dig mulighed for at tilføje standarder for de manglende, fejlcheck osv., men vigtigst af alt, at have tre eksplicitte elementer opfylder typekontrollen.
Hvis du også vil videregive de resterende argumenter, skal du blot tilføje en restparameter til destruktureringen:
function create(element1: number, ...otherElements: any[]) {
// Do something
const [a, b, c, ...d] = otherElements;
return makeSomething(a, b, c, ...d)
}
