Introdução aos Tipos de Função no TypeScript

O TypeScript exige tipos para tudo. Isso inclui suas funções. Você deve definir tipos para as entradas e saídas.

Sintaxe de Função

Você define os tipos de entrada e um tipo de saída desta forma:

function add(x: number, y: number): number {
  return x + y;
}

O TypeScript também utiliza inferência de tipos. Você nem sempre precisa escrever o tipo de saída. O compilador o encontra para você.

Se sua função retornar tipos diferentes, o TypeScript lida com isso. Por exemplo, se uma função retornar um número ou uma string, o compilador detectará ambos.

Tipos de Retorno Especiais

  • void: Use isto quando uma função não retorna nada.
  • never: Use isto quando uma função lança um erro ou interrompe o programa.

Parâmetros

Você pode tornar os parâmetros opcionais usando um ponto de interrogação.

function makeProfile(name: string, age: number, url?: string) {
  // código
}

Você também pode usar valores padrão. Isso torna um parâmetro opcional sem a necessidade de símbolos especiais.

function makeProfile(name: string, age: number, url: string = "www.example.com") {
  return name + " visita " + url;
}

Funções de Callback

Funções são valores. Você pode passá-las como argumentos. Para definir um tipo de callback, use esta sintaxe:

function makePage(func: (n: string, a: number, u?: string) => string, param1: string, param2: number) {
  func(param1, param2);
}

Os nomes dos parâmetros no callback não importam. Apenas os tipos importam.

Arrays de Funções

Se você precisar de uma lista de funções, defina-as como um array daquele tipo de função.

function applyMath(funcs: ((a: number, b: number) => number)[], x: number, y: number) {
  // código
}

Parâmetros Rest

Use o operador spread para aceitar qualquer número de argumentos. Isso armazena todas as entradas em um array.

function sum(...numbers: number[]) {
  // código
}

sum(1, 2, 3);

Fonte: https://dev.to/jsha/introduction-to-typescript-function-types-hin