2016-04-26 17 views
25

Attualmente sto imparando React e penso di capirlo abbastanza bene. Tuttavia, c'è una cosa che mi preoccupa per lo sviluppo di robuste applicazioni React - quali strumenti gli sviluppatori usano per il controllo di tipo statico?React - utilizzando TypeScript vs Flow vs?

Mi piace molto TypeScript. Penso che riduca parecchio il dolore dello sviluppo di applicazioni JavaScript, grazie al controllo del tipo e ad altre caratteristiche accurate. Visual Studio Code offre anche un completamento del codice veramente bello. E so che posso farlo funzionare con React usando typings + DenifitelyTyped.

Il fatto è che non ci sono molti tutorial sull'uso di React + TypeScript. Inoltre non sembrano esserci molti articoli sullo sviluppo usando questa combo. D'altra parte, molte persone sembrano usare Flow, che è un progetto supportato da Facebook (e credo che lo usino anche).

Sono riuscito a trovare uno discussion on Reddit con pro e contro sull'utilizzo del metodo React + TypeScript/React + Flow. Tuttavia, per me, sembra essere abbastanza datato dato che ora ha circa 10 mesi. Penso che molto sia cambiato da allora.

Ho anche trovato due articoli sull'utilizzo di React + Flow e React + TypeScript. L'autore afferma alcuni problemi che incontra quando utilizza entrambe le opzioni e conclude che TypeScript è "la migliore scommessa in questo momento" (novembre 2015), soprattutto perché il progetto Flow ha molti problemi e riceve una bassa attività di sviluppo da Facebook. Dice anche che non funziona bene con Babel?

Quindi, suppongo che la domanda sia: è sicuro usare il combo React + TypeScript, o incontrerò qualche difficoltà? Che mi dici di Flow? Ci sono altri strumenti simili che dovrei controllare? Quale approccio consiglieresti?

Aggiornamento settembre 2017:

Avere più di un anno di esperienza con l'uso quotidiano del dattiloscritto, e giocando con flusso per un po ', ho giunto alle seguenti conclusioni:

  • TypeScript è ancora doloroso da usare fino ad oggi. Il problema è che il mondo JavaScript si muove così velocemente che TypeScript rimane indietro. Stai pensando di utilizzare la nuova fantastica funzionalità di Stage 3 di ES7? No, non puoi. Vuoi ottenere suggerimenti sui tipi per l'ultima versione di alcune librerie? Aspetta un mese, o due, forse di più ...
  • Il flusso ha fatto molta strada, è stato migliorato molto, può catturare alcune cose che TS non può fare. Meglio ancora, finalmente funziona su Windows. Inoltre, c'è un ottimo plugin per VS Code (non ho idea del motivo per cui ha solo un voto 3/5). E funziona al 100% con React Native, TypeScript non è ancora arrivato al 50%.
  • Nella maggior parte dei casi non sono necessari tipi. Tutti i tipi di digitazione aggiuntivi raramente ne valgono la pena. JS è un linguaggio tipizzato dinamicamente, superarlo :)

TL; DR: Se si prevede di utilizzare qualsiasi controllo di tipo, si consiglia di utilizzare Flusso.

+0

È anche possibile utilizzare semplicemente javascript e React offre propTypes in modo che sia possibile assicurarsi che gli oggetti di scena siano del tipo corretto e che vengano inoltrati, se necessario. – erichardson30

+0

Sì, conosco propTypes. Tuttavia, questo risolve il problema solo parzialmente - nel livello vista (se non sbaglio?). E il codice nei negozi e nelle azioni? Mi piacerebbe anche avere una battitura statica. –

+1

http://blog.wolksoftware.com/working-with-react-and-typescript sembra che abbia una buona documentazione sull'utilizzo di dattiloscritto con risposta e le diverse estensioni che è necessario utilizzare – erichardson30

risposta

14

Ho intenzione di iniziare questa risposta dicendo che non ho mai usato Flow, quindi non posso dire molto a riguardo. Ma, stiamo usando React e TypeScript al lavoro e funziona alla grande.

Abbiamo tutti i vantaggi che immagino tu sappia già, come il refactoring, la sicurezza del tipo, l'autocompleto, ecc.

Certo, per quello che ho visto, la sintassi del flusso è più pulita di TypeScript, ma è possibile aggiungere i tipi utilizzando TypeScript in modo incrementale. Penso che sia più una questione di gusti. Alcune persone preferiscono avere il codice digitato esplicitamente, altri preferiscono digitare di meno e avere un'inferenza di tipo più forte.

Informazioni su, le tecnologie direi che TypeScript è una scommessa sicura, Microsoft sta spingendo la lingua (there will be a version 2 soon), anche Angular lo sta utilizzando e ci sono molti sviluppatori Angular. Anche qui su SO, il tag TypeScript ha più di 4K followers ed è raro avere una domanda senza risposta.

Il grosso problema con TypeScript, almeno per noi è che di volta in volta, decidiamo di utilizzare un componente o una libreria che non ha le definizioni di tipo, quindi dobbiamo crearle da soli. Ma immagino, questo è un modo per contribuire alla comunità.

4

Mi sono appena fatto la stessa domanda (anche se non con Reagire) e ho trovato i seguenti articoli utili per valutare i due:

L'approccio adottato dai progettisti flusso sente più funzionale con una migliore inferenza e ab approccio migliore per i null. Tuttavia, TypeScript offre un migliore supporto per la community, in particolare per quanto riguarda l'estrazione di tipi per librerie di terze parti tramite http://definitelytyped.org/, che è importante per il flusso di tipi attraverso tutto il codice per la massima sicurezza dei tipi. TypeScript è stato creato da Microsoft che ha una ricca storia nella compilazione di compilatori e l'evoluzione della tecnologia in direzioni favorevoli - notevole è C# e il fatto che stanno già aggiungendo tipi non nulli (11-07-2016): https://blogs.msdn.microsoft.com/typescript/2016/07/11/announcing-typescript-2-0-beta/

TypeScript sembra la scommessa più sicura oggi.

E per coloro che cercano dattiloscritto in una base di codice esistente ho trovato le seguenti impostazioni nel mio file tsconfig.json davvero utile nel permettere dattiloscritto di coesistere bene con JavaScript (transizione un file che permette alla volta):

{ 
    "compilerOptions": { 
     "allowJs": true, 
     "isolatedModules": true, 
     ... 
    } 
} 
2

nel mio sviluppo Reagire, ho un bel complesso Babel/Webpack/Flow/Mocha toolchain impostare e mai avuto problemi con Flow. Ci vuole uno sforzo per impostare tutto (Webpack può essere scoraggiante all'inizio), ma dopo, funziona. Il flusso è sicuramente la strada da percorrere in quanto è una tecnologia più ristretta e più focalizzata e come tale è più probabile che giochi bene con altri strumenti. Al contrario, TypeScript cerca di essere molto più di un semplice tipo di inferenza di tipo/strumento di controllo del tipo statico e quindi porta bagaglio aggiuntivo e ipotesi. So React è uno strumento specializzato che fa bene una cosa mentre TypeScript è effettivamente un linguaggio stratificato su JavaScript. Per assicurarsi che Microsoft punti a casa, i file TypeScript solitamente hanno anche un'estensione diversa (.ts anziché .js) perché ora usi una lingua diversa, capito?

TypeScript utilizza la generazione del codice per sputare JavaScript, mentre in Flow le annotazioni vengono semplicemente rimosse, non c'è generazione di codice come tale. In passato, la gente di Microsoft che promuoveva TypeScript era solita affermare che la generazione del codice è "file-local" (non ricordo la terminologia esatta usata).Ciò avrebbe dovuto fornire una rassicurante rassicurazione sul fatto che il compilatore TypeScript non stia facendo nulla di magico. Ad ogni modo, non riesco a trovare questa affermazione ben visibile. Con Flow non hai bisogno di certe assicurazioni mentre scrivi in ​​un semplice JavaScript (o qualsiasi altra versione di ECMA per cui hai configurato Babel) e le annotazioni sono, come ho detto, semplicemente spogliate.

Per non parlare del fatto che TypeScript proviene da un'azienda specializzata in pratiche tecniche non etiche e discutibili (non escludo che TypeScript possa alla fine rivelarsi la madre di tutti gli stratagemmi Embrace-Extend-Extinguish).

Inoltre, il sistema di tipo Flow era molto più potente l'ultima volta che mi sono preso la briga di valutare TypeScript (circa 2015) ed era molto più facile applicarlo in modo incrementale o anche sporadico nelle fonti. Per l'integrazione di librerie di terze parti sto usando flowtyped ed è molto raro che io abbia bisogno di integrare quelli trovati lì con le mie definizioni.

Infine, il fatto che Angular utilizzi TypeScript non significa assolutamente nulla in quanto Angular non è realmente rilevante per i nuovi progetti. React ha vinto a mani basse, il tempo di andare avanti.

+2

"un'azienda specializzata in pratiche tecniche non etiche e discutibili" e Facebook no? : P – swalladge

Problemi correlati