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];
Punti critici:
push non è vietato, ma il risultato supera la tipizzazione garantita.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.
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.