Como adicionar tipos TypeScript a parâmetros desestruturados usando a sintaxe de propagação?
Ignore o fato de que isso é ruimadd
função. É uma pergunta sobre o uso da destruição de matriz com sintaxe de propagação no TypeScript.
É isso que estou tentando
const add = ([x,...xs]) => {
if (x === undefined)
return 0
else
return x + add(xs)
}
console.log(add([1,2,3])) //=> 6
Mas não tenho ideia de como adicionar tipos TypeScript a isso. Meu melhor palpite é fazer algo assim (tradução mais direta)
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
Ambas as funções funcionam, mas no TypeScript eu perco a capacidade de desestruturar o parâmetro da matriz e o corpo da função é acumulado com várias coisas feias comoxs[0]
exs.slice(1)
- mesmo que eu as abstraia em suas próprias funções, isso está além do ponto.
É possível adicionar tipos a parâmetros de propagação desestruturados no TypeScript?
O que eu tentei até agora
Algo assim funciona para matrizes fixas
// compiles
const add = ([x,y,z]: [number, number, number]): number => ...
Mas é claro que preciso de entrada de matriz de comprimento variável. Eu tentei isso, mas não compila
// does not compile
const add = ([x, ...xs]: [number, number[]]): number => ...