ProgrammazioneSviluppatore Frontend / Sviluppatore TypeScript

Come si realizza e a cosa serve la tipizzazione rigorosa di array e tuple in TypeScript? Quali sono le differenze e i punti critici nell'uso?

Supera i colloqui con l'assistente IA Hintsage

Risposta

In TypeScript, gli array possono essere tipizzati rigorosamente specificando il tipo degli elementi tramite la notazione type[] o Array<type>. Ad esempio:

let arr: number[] = [1, 2, 3];

Le tuple sono array con una lunghezza fissa e tipi per ogni elemento:

let tuple: [string, number] = ["age", 30];
  • Array: ammette un numero arbitrario di elementi dello stesso tipo.
  • Tuple: fissa rigidamente il numero e l'ordine dei tipi. Permette di creare strutture simili a record o di restituire da una funzione valori di tipi diversi.

Punti critici:

  • Quando si utilizzano metodi degli array (push, pop) su tuple, push non è vietato, ma il risultato supera la tipizzazione garantita.
  • Un'eccessiva espansione della tupla porta a codice "non sicuro".
  • La destrutturazione delle tuple nelle funzioni: un tipo o una lunghezza errata causerà un errore.

Domanda trabocchetto

Le tuple in TypeScript possono contenere un numero variabile di elementi, e come influisce su la tipizzazione?

Risposta: Sì, le tuple possono contenere elementi restanti usando la sintassi ..., ma richiedono comunque la tipizzazione rigorosa degli elementi rimanenti:

let tuple: [string, ...number[]] = ["id", 10, 20, 30];

Tuttavia, gli elementi prima di ... devono essere specificati e il tipo per il restante array deve essere unico.

Esempi di errori reali a causa della non conoscenza delle sottigliezze del tema


Storia

In un progetto e-commerce, un sviluppatore ha cercato di salvare nella tupla [string, number] più di due elementi con push. Questo non ha generato errori durante la compilazione, ma ha rotto il funzionamento della funzione che si aspettava esattamente due elementi, causando errori nel processo degli ordini.


Storia

La funzione restituiva una tupla [string, number], tuttavia il consumatore si aspettava un array di stringhe. La non corrispondenza dei tipi ha causato un errore difficile da tracciare, portando a valori scorretti in produzione.


Storia

Durante la migrazione del codice da JavaScript a TypeScript, sono stati utilizzati array invece di tuple per restituire più valori di tipo diverso. Questo ha infranto la tipizzazione rigorosa e ha causato bug nel codice successivo, basato sull'ordine e sul tipo dei valori.