Fácil TypeScript

Ativando noImplicitAny

Enunciado

Escreva uma função multiplicar que recebe dois parâmetros e retorna o produto. O código deve compilar sem erros mesmo com noImplicitAny ativado. Use anotações de tipo explícitas.

Requisitos

  • A função deve se chamar multiplicar.
  • Os parâmetros devem ter tipo number explícito.
  • O retorno deve ser number.
  • O código deve compilar sem erros com noImplicitAny ativo.

Código inicial

// Complete a função abaixo para que ela compile com noImplicitAny ativo.
function multiplicar(a, b) {
  return a * b;
}

console.log(multiplicar(3, 4));

Saída esperada

12
Ver dica

Adicione : number após cada parâmetro e após os parênteses para indicar o tipo de retorno.

Mostrar solução
// Função com tipos explícitos para satisfazer noImplicitAny.
function multiplicar(a: number, b: number): number {
  return a * b;
}

console.log(multiplicar(3, 4)); // 12

Passo a passo

  1. Declaramos a função multiplicar com dois parâmetros.
  2. Adicionamos : number a cada parâmetro para evitar que o compilador infira any implicitamente.
  3. Especificamos : number como tipo de retorno após os parênteses.
  4. O corpo da função simplesmente retorna o produto a * b.
  5. Chamamos a função com 3 e 4 e imprimimos o resultado.

Por que funciona

Com noImplicitAny ativo, o TypeScript exige que todos os parâmetros tenham tipo explícito ou sejam inferíveis a partir do contexto. Ao anotar os tipos, o compilador entende que a e b são números e permite a operação * sem erros. Isso evita que erros de tipo passem despercebidos.

Erros comuns

  • Esquecer a anotação de retorno: function multiplicar(a: number, b: number) { ... } ainda compila, mas é boa prática anotar o retorno. Se o retorno fosse inferido como any em algum caso, o erro apareceria.
  • Anotar apenas um parâmetro: function multiplicar(a: number, b) { ... } gera erro em b por falta de tipo.
  • Usar any explícito: function multiplicar(a: any, b: any): any { ... } compila, mas foge do propósito do noImplicitAny.

Outra forma de resolver

Se você quiser evitar anotações repetitivas, pode usar uma arrow function com tipos inferidos pelo contexto de uso, mas ainda é necessário anotar os parâmetros:

const multiplicar = (a: number, b: number): number => a * b;

Saída esperada

12