destructuring - Hvordan tilføjer man TypeScript-typer til destrukturerede parametre ved hjælp af spread-syntaks?
Ignorer det faktum, at dette er en dårlig add-funktion. Det er et spørgsmål om at bruge array-destrukturering med spread-syntaks i TypeScript.
Dette er, hvad jeg prøver
const add = ([x,...xs]) => {
if (x === undefined)
return 0
else
return x + add(xs)
}
console.log(add([1,2,3])) //=> 6
Men jeg har ingen idé om, hvordan jeg tilføjer TypeScript-typer til dette. Mit bedste gæt er at gøre noget lignende (den mest direkte oversættelse)
const add = (xs: number[]): number => {
if (xs[0] === undefined)
return 0;
else
return xs[0] + add(xs.slice(1));
};
console.log(add([1,2,3])); // => 6
Begge funktioner virker, men i TypeScript mister jeg muligheden for at destrukturere array-parameteren, og funktionens krop bliver fyldt med en masse grimt stuff som xs[0] og xs.slice(1) - selv hvis jeg abstraherer disse til deres egne funktioner, er det uden for pointen.
Er det muligt at tilføje typer til destrukturerede spredningsparametre i TypeScript?
Hvad jeg har prøvet indtil videre
Noget som dette virker for faste arrays
// compiles
const add = ([x,y,z]: [number, number, number]): number => ...
Men selvfølgelig har jeg brug for input med variable længder af arrays. Jeg prøvede dette, men det kompilerer ikke
// does not compile
const add = ([x, ...xs]: [number, number[]]): number => ...
Svar #1
Min fejl, svaret er lige så enkelt som:
const add = ([x, ...xs]: number[]) => {
if (x === undefined)
return 0
else
return x + add(xs)
}
console.log(add([1, 2, 3])); //=> 6
add(["", 4]); // error
(kode i legeplads)
Originalt svar:
Du kan gøre dette:
const add: (nums: number[]) => number = ([x, ...xs]) => {
if (x === undefined)
return 0
else
return x + add(xs)
}
Du kan også bruge et typealias:
type AddFunction = (nums: number[]) => number;
const add: AddFunction = ([x, ...xs]) => {
...
}
