Lições do módulo (2/2)
Matrizes e Tuplas
Em JavaScript, os arrays podem conter qualquer tipo de elemento e podem aumentar ou diminuir dinamicamente. TypeScript adiciona verificação de tipo estático para garantir que as coleções permaneçam homogêneas ou respeitem uma estrutura de tipo fixa.
Matrizes (coleções homogêneas)
No TypeScript, existem duas maneiras equivalentes de definir o tipo de um array contendo elementos do mesmo tipo:
-
Usando o tipo de elemento seguido de colchetes (
[]):TSconst numbers: number[] = [1, 2, 3]; const strings: string[] = ['a', 'b', 'c']; -
Usando o tipo genérico
Array<T>:TSconst numbers: Array<number> = [1, 2, 3];
Ambas as sintaxes são totalmente válidas, mas a primeira (type[]) é o estilo convencional e mais comum. Se você tentar inserir um valor inválido (por exemplo, numbers.push("hello") em um array number[]), o TypeScript irá gerar um erro em tempo de compilação.
Tuplas (matrizes de comprimento fixo)
Uma tupla é um tipo especial de array que possui um número fixo de elementos onde cada elemento possui um tipo específico predefinido com base em sua posição.
Por exemplo, para armazenar uma resposta HTTP composta por um código de status (número) e uma mensagem (string):
const response: [number, string] = [200, 'OK'];Nesse caso:
- O primeiro elemento (
response[0]) deve ser umnumber. - O segundo elemento (
response[1]) deve ser umstring. - O array deve ser inicializado com exatamente 2 elementos.
Tuplas somente leitura (readonly)
Um detalhe importante sobre tuplas em TypeScript é que em tempo de execução elas são arrays JavaScript normais. Isso significa que métodos mutativos como .push() ou .pop() estão tecnicamente disponíveis e podem alterar o comprimento da tupla, ignorando parcialmente as verificações de tipo.
Para evitar esse comportamento e impor a verdadeira imutabilidade, podemos usar o modificador readonly:
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!Experimente você mesmo
Exercício 1: Matriz de Números
Declare uma matriz chamada pontuações que contenha apenas números e seja inicializada com os valores 90, 85 e 95. Use a anotação de tipo explícita para a matriz. Não use nenhum tipo.
Mostrar dica
Use a sintaxe const pontuações: número[] = ... ou Array<número>.
Solução disponível após 3 tentativas
Exercício 2: Tupla de coordenadas 3D
Declare uma tupla chamada point que representa uma coordenada 3D (três números para X, Y, Z) e é inicializada com os valores 10, 20, 30. Use anotação de tipo explícita.
Mostrar dica
O tipo de tupla deve ser [número, número, número].
Solução disponível após 3 tentativas
Exercício 3: Tupla de informações de localização
Declare uma tupla chamada locationInfo que representa uma coordenada geográfica com seu nome. Deve conter: latitude (número), longitude (número) e o nome da cidade (string). Inicialize-o com os valores 41.9028, 12.4964 e 'Roma'.
Mostrar dica
Use a sintaxe para definir uma tupla com três elementos: [número, número, string].
Solução disponível após 3 tentativas
Exercício 4: Tupla de entrada de log
Declare uma tupla chamada logEntry representando uma linha de log. Deve conter em ordem: um carimbo de data/hora (número), um nível de gravidade (string) e uma mensagem de erro (string). Inicialize-o com carimbo de data e hora 1716300000, nível 'INFO' e mensagem 'Aplicativo iniciado'.
Mostrar dica
Use a sintaxe para definir uma tupla de três elementos: [número, string, string] e atribua os valores especificados.
Solução disponível após 3 tentativas