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:
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:
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:
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:
// 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
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'.
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
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).
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
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.
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
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.
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