Pular para o conteúdo principal
Módulo 3 · Lição 1 de 25/14 no curso~12 min
Lições do módulo (1/2)

Funções digitadas

Funções são os blocos de construção fundamentais de qualquer aplicativo JavaScript. No TypeScript, podemos anotar com precisão argumentos de entrada e valores de retorno, tornando nossas interfaces e chamadas de função extremamente seguras e autodocumentadas.


Parâmetros opcionais e padrão

Em JavaScript, cada parâmetro é opcional e o padrão é undefined se omitido. No TypeScript, por padrão, todo parâmetro declarado é obrigatório.

No entanto, podemos definir parâmetros opcionais usando o ponto de interrogação (?) ou especificar valores padrão diretamente na assinatura da função.

1. Parâmetros Opcionais

Os parâmetros opcionais devem ser posicionados após todos os parâmetros obrigatórios:

TS
function greetUser(name: string, title?: string): string {
  if (title) {
    return `Good morning ${title} ${name}`;
  }
  return `Hello ${name}`;
}

2. Parâmetros padrão

Se nenhum valor for fornecido para um parâmetro com valor padrão, o TypeScript infere seu tipo e atribui o padrão especificado:

TS
function greetUserWithDefault(name: string, prefix: string = 'Hello'): string {
  return `${prefix} ${name}`;
}

Parâmetros de descanso (...args)

Quando queremos aceitar um número variável de argumentos, podemos usar o operador rest. No TypeScript, esses parâmetros devem ser digitados como um array:

TS
function sumAll(message: string, ...numbers: number[]): string {
  const total = numbers.reduce((sum, n) => sum + n, 0);
  return `${message} ${total}`;
}

Tipos de função (assinaturas de chamada)

Podemos definir o tipo de uma função de forma independente e então reutilizá-la em declarações de variáveis ​​ou argumentos de retorno de chamada:

TS
// Define function type using type alias
type MathOperation = (a: number, b: number) => number;

const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;

Esta abordagem é essencial ao passar funções como argumentos para outras funções (callbacks).


Experimente você mesmo

Exercício 1: Parâmetros Opcionais

Exercício#ts.m3.l1.e1
Tentativas: 0Carregando…

Crie uma função chamada formatName que aceite um parâmetro firstName (string) e um parâmetro opcional lastName (string). Se lastName for fornecido, retorne 'firstName lastName'; caso contrário, retorne apenas 'firstName'.

Carregando editor…
Mostrar dica

Lembre-se que o parâmetro opcional é declarado usando lastName?: string após o obrigatório.

Solução disponível após 3 tentativas

Exercício 2: Parâmetros Padrão

Exercício#ts.m3.l1.e2
Tentativas: 0Carregando…

Crie uma função chamada potência que aceite uma base (número) e um expoente (número com valor padrão de 2). A função deve calcular e retornar o valor da base elevado ao expoente (use Math.pow).

Carregando editor…
Mostrar dica

Use base: número e expoente: número = 2 na assinatura da função.

Solução disponível após 3 tentativas

Exercício 3: Assinatura da Função

Exercício#ts.m3.l1.e3
Tentativas: 0Carregando…

Defina um alias de tipo chamado BinaryOp que descreve uma função que aceita dois parâmetros numéricos e retorna um número. A seguir, declare uma constante denominada sum do tipo BinaryOp que implementa a adição.

Carregando editor…
Mostrar dica

A sintaxe para um tipo de função é (a: número, b: número) => número.

Solução disponível após 3 tentativas

Exercício 4: Função de retorno de chamada

Exercício#ts.m3.l1.e4
Tentativas: 0Carregando…

Crie uma função chamada processItems que aceite dois parâmetros: items (um array de strings) e callback (uma função que aceita uma única string e não retorna nada, ou seja, void). A função deve executar um loop for...of sobre cada elemento nos itens e passá-lo para o retorno de chamada.

Carregando editor…
Mostrar dica

Declare a assinatura como processItems(items: string[], callback: (item: string) => void): void e use um loop para chamar o retorno de chamada.

Solução disponível após 3 tentativas