Desafio TypeScript

Array readonly com validação

Enunciado

Crie uma função somarTodos que recebe um readonly number[] e retorna a soma de todos os elementos. Em seguida, crie um array readonly com os números 1, 2, 3, 4, 5 e use a função para calcular a soma. Imprima o resultado.

Requisitos

  • A função deve aceitar readonly number[].
  • O array deve ser declarado como readonly.
  • A soma deve ser calculada corretamente.
  • A saída deve ser o número 15.

Código inicial

// Implemente a função somarTodos e use-a

Saída esperada

15
Ver dica

Use reduce ou um loop for...of para somar.

Mostrar solução
// Função que aceita array readonly e soma os elementos
function somarTodos(numeros: readonly number[]): number {
  let soma = 0;
  for (const num of numeros) {
    soma += num;
  }
  return soma;
}

// Array readonly
const valores: readonly number[] = [1, 2, 3, 4, 5];
// valores.push(6); // Erro de compilação

const resultado = somarTodos(valores);
console.log(resultado); // 15

Passo a passo

  1. Definimos a função somarTodos que recebe um parâmetro numeros do tipo readonly number[].
  2. Dentro da função, inicializamos soma com 0.
  3. Usamos um loop for...of para percorrer cada número e adicioná-lo à soma.
  4. Retornamos a soma.
  5. Criamos um array valores com readonly number[] e os números de 1 a 5.
  6. Chamamos somarTodos(valores) e armazenamos em resultado.
  7. Imprimimos resultado, que será 15.

Por que funciona

O tipo readonly number[] impede que a função modifique o array, garantindo segurança. O loop soma todos os elementos corretamente.

Erros comuns

  • Tentar modificar o array dentro da função: numeros.push(6) — erro de compilação.
  • Esquecer o readonly na declaração: const valores: number[] = [1,2,3,4,5]; — ainda funciona, mas não protege contra mutações.
  • Usar reduce sem tipar o acumulador: numeros.reduce((a, b) => a + b) — pode inferir number, mas é menos explícito.

Outra forma de resolver

Usar reduce:

function somarTodos(numeros: readonly number[]): number {
  return numeros.reduce((acc, num) => acc + num, 0);
}

Saída esperada

15