Type Assertion (asserzione di tipo) è un modo per lo sviluppatore di comunicare al compilatore TypeScript come dovrebbe interpretare il tipo di un valore. Sintassi:
let someValue: any = "esempio"; let strLen: number = (someValue as string).length;
Type Assertion non converte i dati a runtime, ma suggerisce solo al compilatore il loro tipo. Se l'asserzione è errata, il programma non si fermerà, il che potrebbe portare a runtime errors. A differenza del "casting" in C# o Java, TypeScript non esegue alcuna conversione.
Nell'uso non è possibile fare asserzioni tra tipi non correlati direttamente (ad esempio, as number as User), ma ci sono modi per aggirarlo tramite as unknown.
È sicuro utilizzare il doppio assertion
value as unknown as Typeper convertire un valore in un altro tipo?
Risposta errata: Sì, è sicuro, perché così scrivono la maggior parte degli sviluppatori TypeScript.
Risposta corretta: No, è pericoloso. Questo metodo esclude i controlli del compilatore e consente di convertire qualsiasi tipo in qualsiasi altro, aggirando la tipizzazione, il che potrebbe portare a errori a runtime. Usalo solo se sei sicuro che il valore sia realmente compatibile con il tipo di destinazione.
Storia
Uno sviluppatore ha fatto Type Assertion per un oggetto da un'API esterna come se fosse il proprio'interfaccia (
as MyType), senza controllare i campi. L'API ha cambiato la struttura e l'applicazione è caduta quando ha cercato di accedere a chiavi inesistenti.
Storia
In una libreria per lavorare con il DOM, qualcuno ha fatto una doppia assertion
el as unknown as HTMLElement, senza assicurarsi del tipo, e poi ha ricevuto un errore quando ha provato a chiamare metodi HTMLElement su un altro oggetto.
Storia
Nel tentativo di risolvere errori di tipo durante l'integrazione con codice JS, uno degli sviluppatori ha applicato
as anyalla configurazione. Questo ha mascherato il problema e il bug con la gestione dei dati errata è emerso solo in produzione.