Pular para o conteúdo principal
Módulo 1 · Lição 2 de 22/14 no curso~10 min
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:

  1. Usando o tipo de elemento seguido de colchetes ([]):

    TS
    const numbers: number[] = [1, 2, 3];
    const strings: string[] = ['a', 'b', 'c'];
  2. Usando o tipo genérico Array<T>:

    TS
    const 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):

TS
const response: [number, string] = [200, 'OK'];

Nesse caso:

  • O primeiro elemento (response[0]) deve ser um number.
  • O segundo elemento (response[1]) deve ser um string.
  • 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:

TS
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!

Experimente você mesmo

Exercício 1: Matriz de Números

Exercício#ts.m1.l2.e1
Tentativas: 0Carregando…

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.

Carregando editor…
Mostrar dica

Use a sintaxe const pontuações: número[] = ... ou Array&lt;número&gt;.

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

Exercício 2: Tupla de coordenadas 3D

Exercício#ts.m1.l2.e2
Tentativas: 0Carregando…

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.

Carregando editor…
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

Exercício#ts.m1.l2.e3
Tentativas: 0Carregando…

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'.

Carregando editor…
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

Exercício#ts.m1.l2.e4
Tentativas: 0Carregando…

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'.

Carregando editor…
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