ProgrammazioneSviluppatore Frontend

Spiega come TypeScript implementa la tipizzazione rigorosa rispetto a JavaScript. Quali sono le principali differenze, quali vantaggi offre questa funzionalità nei progetti di grandi dimensioni?

Supera i colloqui con l'assistente IA Hintsage

Risposta.

TypeScript è un'estensione di JavaScript che realizza la tipizzazione statica (rigorosa). Ciò significa che il controllo dei tipi avviene durante la compilazione, e non in fase di esecuzione, come in JavaScript.

Principali differenze:

  • Controllo statico dei tipi: le variabili, i parametri delle funzioni e i valori di ritorno possono essere descritti esplicitamente.
  • Tipi predefiniti (type inference): determina implicitamente il tipo di una variabile in base al valore assegnato.
  • Unificazione delle API: le IDE e gli strumenti di analisi del codice possono mostrare i tipi, completare automaticamente i campi, avvisare sugli errori.

Vantaggi nei progetti di grandi dimensioni:

  • Standard unificato, meno bug.
  • Refactoring più rapido e sicuro.
  • Collaborazione semplificata.

Esempio:

typ User = { name: string; age: number; } function greet(user: User): string { return 'Hello, ' + user.name; } const u: User = { name: 'Ivan', age: 30 }; greet(u); // Ok

Domanda trabocchetto.

Domanda: È possibile dichiarare una variabile di tipo any in un progetto TypeScript, e il progetto perderà i vantaggi della tipizzazione rigorosa?

Risposta:

Sì, TypeScript consente di utilizzare il tipo any, che è equivalente all'assenza di tipizzazione per quella variabile. Se si usa any frequentemente, questo annulla il principale vantaggio di TypeScript - la tipizzazione rigorosa, e si rischia di ottenere errori tipici di runtime, proprio come in JavaScript.

Esempio:

let data: any = 'test'; data = 42; // Non si presenterà un errore, ma potrebbe causare problemi

Esempi di errori reali dovuti alla mancanza di conoscenza delle sfumature dell'argomento.


Storia

Uno sviluppatore usava spesso il tipo any per oggetti complessi, per "progredire più velocemente". Di conseguenza, un giorno è arrivato un oggetto con campi mancanti, e l'applicazione è andata in crash: l'errore è finito in produzione a causa della mancanza di controllo dei tipi.


Storia

In un grande progetto si scambiavano messaggi tra due microservizi diversi. Uno dei servizi ha cambiato la struttura dell'oggetto, ma TypeScript non ha avvisato di questo, poiché il tipo era stato esplicitamente definito come any. Il bug è stato trovato dopo un mese a causa delle segnalazioni degli utenti.


Storia

Un giovane sviluppatore non ha descritto il tipo di valore restituito da una funzione pubblica, facendo affidamento sull'inferenza automatica del tipo. Dopo il refactoring, dall'altra parte sono cessate di funzionare le aspettative sui tipi, e si sono verificati una serie di bug in tutto il progetto.