Funções em TypeScript
Definindo Funções
Em JavaScript, funções são definidas com a palavra-chave function. Veja o exemplo:
function add(a, b) {
  return a + b;
}
// utilizando a função
let result1 = add(1, 2); // resultado: 3
let result2 = add("1", "2"); // resultado: 12Em TypeScript, as funções também são definidas com a palavra-chave function, mas ele oferece funcionalidades adicionais. Em especial, é possível definir os tipos dos parâmetros e o tipo de retorno da função.
Parâmetros da Função
Uma função pode ter parâmetros, que são declarados após o nome da função, dentro dos parênteses, separados por vírgulas. Após o nome do parâmetro, o tipo pode ser especificado com dois pontos:
// definição da função
function add(a: number, b: number) {
  let result = a + b;
  console.log(result);
}
// chamada da função
add(20, 30); // 50
add(10, 15); // 25Como os parâmetros têm o tipo number, ao tentar chamar a função com parâmetros do tipo string:
add("1", "2");O compilador TypeScript lançará um erro, pois os parâmetros devem ser do tipo number, e não string.
Além de usar os parâmetros passados, uma função também pode acessar variáveis globais definidas fora dela:
let ratio: number = 1.5;
function add(a: number) {
  let result = a * ratio;
  console.log(result);
}
add(20); // 30
add(10); // 15Retorno da Função
Uma função pode retornar um valor de um tipo específico, chamado de "tipo de retorno" da função. O tipo de retorno é especificado após os parâmetros, usando dois pontos:
function add(a: number, b: number): number {
  return a + b;
}
let result = add(1, 2);
console.log(result);Neste exemplo, a função retorna um valor do tipo number.
Se a função não retornar nada, o tipo void deve ser utilizado:
function add(a: number, b: number): void {
  console.log(a + b);
}
add(10, 20);Parâmetros Opcionais
Em TypeScript, o número de argumentos passados para uma função deve corresponder exatamente ao número de parâmetros definidos:
function getName(firstName: string, lastName: string) {
  return firstName + " " + lastName;
}
let name1 = getName("John", "Wick");
let name2 = getName("John", "Wick", "BabaYaga"); // erro: muitos parâmetros
let name3 = getName("John"); // erro: poucos parâmetrosPara permitir que uma função receba um número variável de argumentos, alguns parâmetros podem ser marcados como opcionais, usando o símbolo ?. Parâmetros opcionais devem ser definidos após os obrigatórios:
function getName(firstName: string, lastName?: string) {
  if (lastName) return firstName + " " + lastName;
  else return firstName;
}
let name1 = getName("John", "Wick");
console.log(name1); // John Wick
let name2 = getName("John");
console.log(name2); // JohnNo segundo exemplo, como foi passado apenas o primeiro nome, o segundo parâmetro será undefined. A função então verifica se o valor foi fornecido antes de utilizá-lo.
Valores Padrão dos Parâmetros
Os parâmetros também podem ter valores padrão. Se um valor não for passado ao chamar a função, o valor padrão será usado:
function getName(firstName: string, lastName: string = "Doe") {
  return firstName + " " + lastName;
}
let name1 = getName("John", "Wick");
console.log(name1); // John Wick
let name2 = getName("John");
console.log(name2); // John DoeO valor padrão de um parâmetro pode ser o resultado de uma expressão:
function defaultLastName(): string {
  return "Smith";
}
function getName(firstName: string, lastName: string = defaultLastName()) {
  return firstName + " " + lastName;
}
let name1 = getName("Tom");
console.log(name1); // Tom Smith