Conjunto indefinido e preenchimento de parâmetros - TypeScript
Conjunto indefinido de parâmetros
Se for necessário que uma função aceite um conjunto de parâmetros do mesmo tipo, utiliza-se o sinal de reticências, após o qual vem um array:
function addNumbers(firstNumber: number, ...numberArray: number[]): number {
let result = firstNumber;
for (let i = 0; i < numberArray.length; i++) {
result += numberArray[i];
}
return result;
}
let num1 = addNumbers(3, 7, 8);
console.log(num1); // 18
let num2 = addNumbers(3, 7, 8, 9, 4);
console.log(num2); // 31
Neste caso, a função addNumbers
firstNumber
numberArray
number[]
number
Preenchimento de parâmetros
O TypeScript permite usar arrays para passar dados a vários parâmetros de uma só vez. Considere o seguinte exemplo:
function sum(...args: number[]): number {
let result = 0;
for (let i = 0; i < args.length; i++) {
result += args[i];
}
return result;
}
const numbers = [1, 3, 5, 7, 9];
let num = sum(...numbers);
console.log(num); // 25
Aqui, a função sum()
args
Para passar valores a esses parâmetros, é usado o operador ...,
let num = sum(...numbers);
Ou seja, isso é equivalente a:
let num = sum(1, 3, 5, 7, 9);
Agora, vamos considerar uma função com um conjunto fixo de parâmetros:
function sum(a: number, b: number): number {
return a + b;
}
const numbers = [1, 3, 5, 7, 9];
let num = sum(...numbers); // ! Erro: a função sum aceita apenas dois parâmetros
console.log(num); // 25
Ao compilar este código, obteremos um erro, pois a função sum()
[1, 3, 5, 7, 9]
function sum(a: number, b: number): number {
return a + b;
}
const numbers = [1, 3] as const;
let num = sum(...numbers);
console.log(num); // 25
Observe que para o array é usada a expressão as const
const numbers = [1, 3] as const;
Isso é necessário para que o TypeScript saiba que o array não deve ser modificado e que ele deve ser tratado como um conjunto fixo de valores. Se não usarmos a palavra-chave const
Se a função tiver parâmetros opcionais, o array de valores passado pode conter valores para eles ou não:
function sum(a: number, b: number, c?: number): number {
let result = a + b;
if (c !== undefined) { result += c; }
return result;
}
const numbers1 = [1, 3] as const;
let num1 = sum(...numbers1); // a = 1, b = 3
console.log(num1); // 4
const numbers2 = [1, 3, 7] as const;
let num2 = sum(...numbers2); // a = 1, b = 3, c = 7
console.log(num2); // 11
Além disso, podemos passar valores de diferentes tipos na forma de uma tupla:
function printValues(name: string, age: number) {
console.log(name);
console.log(age);
}
const values = ["Tom", 36] as const;
printValues(...values); // name = "Tom", age = 36
Neste caso, a função printValues()
string
number
values
["Tom", 36]
values
const values = [36, "Tom"] as const;
printValues(...values);
Como o primeiro valor do array values é do tipo number
string