Ricerca…


introduzione

Se trovi gli argomenti per i sistemi di tipi persuasivi in ​​generale, allora sarai soddisfatto di TypeScript.

Porta molti dei vantaggi del sistema di tipi (sicurezza, leggibilità, strumenti migliorati) all'ecosistema JavaScript. Soffre anche di alcuni degli inconvenienti dei sistemi di tipi (maggiore complessità e incompletezza).

Osservazioni

I pregi dei linguaggi tipizzati e non tipizzati sono stati discussi per decenni. Gli argomenti per i tipi statici includono:

  1. Sicurezza: i sistemi di tipo consentono di rilevare molti errori in anticipo, senza eseguire il codice. TypeScript può essere configurato per consentire meno errori di programmazione
  2. Leggibilità: i tipi espliciti semplificano la comprensione del codice da parte degli esseri umani. Come scrisse Fred Brooks: "Mostrami i tuoi diagrammi di flusso e nascondi i tuoi tavoli, e continuerò a essere mistificato Mostrami le tue tabelle e di solito non ho bisogno dei tuoi diagrammi di flusso, saranno ovvi."
  3. Tooling: i sistemi di tipo rendono il codice più facile da capire per i computer. Ciò consente a strumenti come IDE e linters di essere più potenti.
  4. Prestazioni: i sistemi di tipo rendono il codice più veloce, riducendo la necessità di controllo del tipo di runtime.

Poiché l'output di TypeScript è indipendente dai suoi tipi , TypeScript non ha alcun impatto sulle prestazioni. L'argomento per l'utilizzo di TypeScript si basa sugli altri tre vantaggi.

Gli argomenti contro i sistemi di tipi includono:

  1. Complessità aggiunta: i sistemi di tipi possono essere più complessi del runtime linguistico che descrivono. Le funzioni di ordine superiore possono essere facilmente implementate in modo corretto ma difficili da scrivere . Gestire le definizioni dei tipi crea ulteriori barriere all'utilizzo di librerie esterne.
  2. Aggiunta di verbosità: le annotazioni di tipo possono aggiungere hotplate al codice, rendendo la logica sottostante più difficile da seguire.
  3. Iterazione più lenta: introducendo una fase di costruzione, TypeScript rallenta il ciclo di modifica / salvataggio / ricarica.
  4. Incompleteness: un sistema di tipo non può essere sia sano che completo. Ci sono programmi corretti che TypeScript non consente. E i programmi che TypeScript accetta possono ancora contenere bug. Un sistema di tipo non allevia la necessità di test. Se si utilizza TypeScript, potrebbe essere necessario attendere più a lungo per utilizzare le nuove funzionalità del linguaggio ECMAScript.

TypeScript offre alcuni modi per risolvere tutti questi problemi:

  1. Aggiunta complessità Se digitare una parte di un programma è troppo difficile, TypeScript può essere disabilitato in gran parte usando un opaco di any tipo. Lo stesso vale per i moduli esterni.
  2. Aggiunto verbosità. Questo può essere parzialmente risolto attraverso i tipi alias e la capacità di TypeScript di dedurre i tipi. Scrivere un codice chiaro è tanto un'arte quanto una scienza: rimuovere troppe annotazioni di tipo e il codice potrebbe non essere più chiaro ai lettori umani.
  3. Iterazione più lenta: un passo di costruzione è relativamente comune nel moderno sviluppo di JS e TypeScript si integra già con la maggior parte degli strumenti di costruzione . E se TypeScript rileva un errore in anticipo, può farti risparmiare un intero ciclo di iterazione!
  4. Incompletezza. Sebbene questo problema non possa essere completamente risolto, TypeScript è stato in grado di catturare più e più modelli JavaScript espressivi nel tempo. Esempi recenti includono l'aggiunta di tipi mappati in TypeScript 2.1 e mixin in 2.2 .

Gli argomenti a favore e contro i sistemi di tipi in generale si applicano ugualmente bene a TypeScript. L'uso di TypeScript aumenta l'overhead per l'avvio di un nuovo progetto. Ma col tempo, mentre il progetto aumenta di dimensioni e guadagna più contributori, la speranza è che i professionisti del suo utilizzo (sicurezza, leggibilità, strumenti) diventino più forti e superino gli svantaggi. Questo si riflette nel motto di TypeScript: "JavaScript che scala".

Sicurezza

TypeScript rileva gli errori di tipo precoce attraverso l'analisi statica:

function double(x: number): number {
  return 2 * x;
}
double('2');
//     ~~~ Argument of type '"2"' is not assignable to parameter of type 'number'.

leggibilità

TypeScript consente agli editor di fornire documentazione contestuale:

Completamento automatico contestuale per metodo slice slice

Non dimenticherai mai se String.prototype.slice richiede di nuovo (start, stop) o (start, length) !

Tooling

TypeScript consente agli editor di eseguire refactoring automatici che sono a conoscenza delle regole delle lingue.

Un simbolo rinominato, ma solo nel proprio ambito

Qui, ad esempio, Visual Studio Code è in grado di rinominare i riferimenti al foo interno senza alterare il foo esterno. Questo sarebbe difficile da fare con una semplice ricerca / sostituzione.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow