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:
-
Usare il tipo dell'elemento seguito dalle parentesi quadre (
[]):TSconst numbers: number[] = [1, 2, 3]; const strings: string[] = ['a', 'b', 'c']; -
Usare il tipo generico
Array<T>:TSconst 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):
const response: [number, string] = [200, 'OK'];In questo caso:
- Il primo elemento (
response[0]) deve essere unnumber. - Il secondo elemento (
response[1]) deve essere unastring. - 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:
const point: readonly [number, number] = [10, 20];
// point.push(30); // Errore a tempo di compilazione!Prova tu
Esercizio 1: Array di Numeri
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.
Mostra suggerimento
Usa la sintassi const scores: number[] = ... oppure Array<number>.
Soluzione disponibile dopo 3 tentativi
Esercizio 2: Tupla Coordinate 3D
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.
Mostra suggerimento
Il tipo della tupla deve essere [number, number, number].
Soluzione disponibile dopo 3 tentativi
Esercizio 3: Tupla Informazioni Posizione
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'.
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
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'.
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