Ora è uscito TypeScript, è una notizia entusiasmante per me, ma come posso convertire tutti i file JavaScript esistenti in TypeScript.
Ora è uscito TypeScript, è una notizia entusiasmante per me, ma come posso convertire tutti i file JavaScript esistenti in TypeScript.
Risposte:
Temo che questo sarà molto problematico. TypeScript è un superset di JavaScript . Ciò implica che tutto il codice JavaScript valido è anche un codice TypeScript valido. Che è semplicemente sbagliato. Il codice seguente è corretto in JavaScript, ma crea un errore in TypeScript:
var data={x:5, y:6};
data.z=5;
È possibile ottenere il comportamento dinamico di JavaScript dichiarando i dati come "ambientali"
var data:any={x:5, y:6};
data.z=5;
Ora funzionerà anche in TypeScript. Tuttavia, è possibile modificare l'estensione di un file .js in .ts e passare questo file al compilatore TypeScript. Questo mi ha davvero confuso e ho posto la domanda nel canale IRC TypeScript su freenode. Si è scoperto che il compilatore Typescript controlla il suo input per JavaScript valido e semplicemente non fa nulla nel caso in cui trova qualcosa. Intuitivamente suona bene. Dovresti essere in grado di "convertire" tutto il tuo JavaScript in Typescript semplicemente aggiornando le estensioni dei file ed essere pronto. Purtroppo questo non funziona come previsto. Supponiamo che tu abbia questo codice:
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
Modifica: ho appena provato a compilare questo e non funziona. Mi dispiace, mi sembra di essermi sbagliato: il compilatore TypeScript non accetta nemmeno JavaScript puro. Proverò a scoprire cosa è andato storto.
Hai modificato l'estensione del file in .ts e usa la funzione func nell'altro codice. All'inizio tutto sembra a posto ma poi si presenta un brutto bug. Decidi che un controllo statico del tipo potrebbe aiutarti e cambi il codice in:
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
Ma ora questo non è più un codice JavaScript valido e farà sì che il compilatore generi molti messaggi di errore. Dopo che tutti i dati non hanno membri "z". ... Questo comportamento potrebbe essere evitato se il tipo predefinito fosse sempre "qualsiasi" ma l'inferenza del tipo sarebbe assolutamente inutile.
Quindi, come risolvi questo problema? La risposta è: file di dichiarazione. È possibile utilizzare il codice JavaScript "così com'è" nel progetto e ottenere comunque il controllo del tipo statico con l'aiuto di alcuni file .d.ts. Informano il compilatore quali variabili, metodi e "classi" sono dichiarati in un file JavaScript, inclusi i loro tipi. Pertanto consentono la verifica del tipo in fase di compilazione e l'intellisense fantastico. Un file .d.ts per il mio esempio sarebbe
declare var data:any;
declare function func(n:string);
Salvalo come "myjsfile.d.ts" e importalo in dattiloscritto con
///<reference path="myjsfile.d.ts"/>
assicurati di includere lo script JavaScript nel tuo file html sopra il dattiloscritto compilato. Ecco un link interessante . Potresti essere interessato alla sezione "Trasformare JavaScript in TypeScript".
noEmitOnErrorè spento, è ancora in grado di funzionare ed emettere il suo transpilation. Pertanto, mentre mostra errori (il che disturba), puoi effettivamente ignorarli e usare la transpilazione TypeScript nonostante (permettendo, ad esempio, il passaggio graduale da JS a TS). Inoltre, almeno alcuni degli errori possono essere disabilitati tramite switch come noImplicitAny(forse tutti, anche se IDK).
Aggiornamento: lo strumento è descritto in dettaglio in questo post
ReSharper a partire dalla versione 9 ( build EAP disponibili ) ha funzionalità per convertire automaticamente il codice JavaScript in TypeScript. Puoi iniziare rinominando il file .js in .ts e vedere i suggerimenti di R # come questo:

Non l'ho provato su esempi del mondo reale. Ma è in grado di convertire un gran numero di modelli JavaScript.
Dal terminale (mac):
for f in *.js; do mv $f `basename $f .js`.ts; done;
Rinomina tutti i file .js in .ts
Questo è un po 'ironico, ma come sottolinea Benjamin sopra i file JavaScript sono TypeScript validi . Se vuoi aggiungere tipi, classi, interfacce, ecc. Al tuo JavaScript - dovrai tu stesso progettare e cambiare il tuo codice usando questi concetti - c'è poca / nessuna conversione automatica per questo.
Con GNU findutils (la maggior parte dei * nix) + Bash, basta fare:
find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
var a = 5; a = "";