Vai al contenuto
eLearner.app
Modulo 1 · Lezione 2 di 22/14 nel corso~10 min
Lezioni del modulo (2/2)

Array e Tuple

In JavaScript, gli array possono contenere qualsiasi tipo di elemento e possono crescere o ridursi in modo del tutto dinamico. TypeScript aggiunge il controllo statico dei tipi per garantire che le collezioni rimangano omogenee o che rispettino una struttura fissa di tipi.


Array (Collezioni Omogenee)

In TypeScript, ci sono due modi equivalenti per definire il tipo di un array contenente elementi dello stesso tipo:

  1. Usare il tipo dell'elemento seguito dalle parentesi quadre ([]):

    TS
    const numbers: number[] = [1, 2, 3];
    const strings: string[] = ['a', 'b', 'c'];
  2. Usare il tipo generico Array<T>:

    TS
    const numbers: Array<number> = [1, 2, 3];

Entrambe le sintassi sono perfettamente valide, ma la prima (type[]) è quella convenzionale e più comune in quasi tutti i progetti. Se provi ad inserire un valore non valido (es. numbers.push("hello") su un array di tipo number[]), TypeScript genererà un errore a tempo di compilazione.


Le Tuple (Strutture a dimensione fissa)

Una tupla è un tipo speciale di array che ha un numero fisso di elementi e in cui ogni elemento ha un tipo specifico predefinito in base alla sua esatta posizione.

Ad esempio, se vogliamo memorizzare una risposta HTTP composta da un codice di stato (numero) e un messaggio (stringa):

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

In questo caso:

  • Il primo elemento (response[0]) deve essere un number.
  • Il secondo elemento (response[1]) deve essere una string.
  • L'array deve essere inizializzato con esattamente 2 elementi.

Tuple Sola Lettura (readonly)

Un dettaglio importante sulle tuple in TypeScript è che a runtime sono comunque normali array JavaScript. Questo significa che metodi come .push() o .pop() sono tecnicamente disponibili e potrebbero alterare la lunghezza della tupla, bypassando parzialmente i controlli di tipo.

Per prevenire questo comportamento e garantire una vera immutabilità, possiamo usare il modificatore readonly:

TS
const point: readonly [number, number] = [10, 20];
// point.push(30); // Errore a tempo di compilazione!

Prova tu

Esercizio 1: Array di Numeri

Esercizio#ts.m1.l2.e1
Tentativi: 0Caricamento…

Dichiara un array chiamato scores che contiene solo numeri ed è inizializzato con i valori 90, 85, e 95. Usa l'annotazione di tipo esplicita per l'array. Non usare il tipo any.

Caricamento editor…
Mostra suggerimento

Usa la sintassi const scores: number[] = ... oppure Array<number>.

Soluzione disponibile dopo 3 tentativi

Esercizio 2: Tupla Coordinate 3D

Esercizio#ts.m1.l2.e2
Tentativi: 0Caricamento…

Dichiara una tupla chiamata point che rappresenta una coordinata 3D (tre numeri per X, Y, Z) ed è inizializzata con i valori 10, 20, 30. Usa l'annotazione di tipo esplicita.

Caricamento editor…
Mostra suggerimento

Il tipo della tupla deve essere [number, number, number].

Soluzione disponibile dopo 3 tentativi

Esercizio 3: Tupla Informazioni Posizione

Esercizio#ts.m1.l2.e3
Tentativi: 0Caricamento…

Dichiara una tupla chiamata locationInfo che rappresenta una coordinata geografica con il suo nome. Deve contenere: latitudine (numero), longitudine (numero) e nome della città (stringa). Inizializzala con i valori 41.9028, 12.4964 e 'Rome'.

Caricamento editor…
Mostra suggerimento

Usa la sintassi per definire una tupla con tre elementi: [number, number, string].

Soluzione disponibile dopo 3 tentativi

Esercizio 4: Tupla Riga di Log

Esercizio#ts.m1.l2.e4
Tentativi: 0Caricamento…

Dichiara una tupla chiamata logEntry che rappresenta una riga di log. Deve contenere nell'ordine: un timestamp (numero), un livello di severità (stringa) e un messaggio di errore (stringa). Inizializzala con il timestamp 1716300000, livello 'INFO' e messaggio 'Application started'.

Caricamento editor…
Mostra suggerimento

Usa la sintassi per definire una tupla di tre elementi: [number, string, string] e assegna i valori indicati.

Soluzione disponibile dopo 3 tentativi