React-usando TypeScript vs Flow vs?


Actualmente estoy aprendiendo React y creo que lo entiendo bastante bien. Sin embargo, hay una cosa que me ha estado molestando con respecto al desarrollo de aplicaciones React robustas: ¿qué herramientas usan los desarrolladores para la comprobación de tipos estáticos?

Me gusta mucho TypeScript. Creo que reduce el dolor de desarrollar aplicaciones JavaScript bastante, gracias a la comprobación de tipos y otras características ordenadas. Visual Studio Code también ofrece una terminación de código realmente agradable. Y sé que puedo hacerlo trabaja con React usando tipos + DenifitelyTyped .

La cosa es que no hay muchos tutoriales sobre el uso de React + TypeScript. Tampoco parece haber muchos artículos sobre el desarrollo usando este combo. Por otro lado, muchas personas parecen estar usando Flow, que es un proyecto respaldado por Facebook (y supongo que también lo usan).

He logrado encontrar una discusión en Reddit con pros y contras sobre ir al React + TypeScript / React + Forma de flujo. Sin embargo, para mí, parece ser bastante anticuado, ya que tiene unos 10 meses de antigüedad. Creo que mucho ha cambiado desde entonces.

También he encontrado dos artículos sobre el uso de React + Flow y React + TypeScript. El autor afirma algunos problemas que ha encontrado al usar ambas opciones y concluye que TypeScript es "la mejor apuesta en este momento" (noviembre de 2015), especialmente porque el proyecto Flow tiene muchos problemas y recibe poca actividad de desarrollador de Facebook. He también menciona que no juega bien con Babel?

Entonces, supongo que la pregunta sería: ¿Es seguro usar el combo React + TypeScript, o me toparé con algunas dificultades? ¿Qué hay de Flow? ¿Hay otras herramientas similares que debería revisar? ¿Qué enfoque recomendaría?

Actualización de Septiembre 2017:

Con más de un año de experiencia con el uso diario de TypeScript, y jugando con Flow por un tiempo, he llegado a lo siguiente conclusiones:

  • TypeScript es todavía doloroso de usar hasta el día de hoy. El problema es que el mundo de JavaScript se mueve tan rápido que TypeScript se queda atrás. ¿Estás pensando en usar esa nueva y elegante función ES7 stage 3? No, no puedes. ¿Deseas obtener sugerencias de tipos para la última versión de alguna biblioteca? Espera un mes, o dos, tal vez más...
  • Flow ha recorrido un largo camino, se ha mejorado mucho, puede atrapar algunas cosas que los TS no pueden. Windows. Además, hay un gran complemento para VS Code (no tengo idea de por qué solo tiene una calificación de 3/5). Y funciona al 100% con React Native, TypeScript aún no está al 50%.
  • La mayoría de las veces, no necesita tipos en absoluto. Todo el tecleo adicional rara vez vale la pena. JS es un lenguaje dinámicamente escrito, supéralo:)

TL;DR: Si planea usar cualquier comprobador de tipo, le recomiendo usar Flow.

Author: Honza Kalfus, 2016-04-26

3 answers

Voy a empezar esta respuesta diciendo que nunca he usado Flow, así que no puedo decir mucho al respecto. Pero, estamos usando React y TypeScript en el trabajo y funciona muy bien.

Tenemos todos los beneficios que imagino que ya conoces, como refactorización, seguridad de tipos, autocompletado, etc.

Claro, por lo que he visto, la sintaxis de flujo es más limpia que TypeScript, pero puede agregar sus tipos usando TypeScript de forma incremental. Creo que esto es más una cuestión de gustos. Algunas personas prefieren tener el código escrito explícitamente, otros prefieren escribir menos y tener una inferencia de tipo más fuerte.

Acerca de, las tecnologías yo diría que TypeScript es una apuesta segura, Microsoft está empujando el lenguaje ( habrá una versión 2 pronto), Angular está utilizando así y hay una gran cantidad de desarrolladores Angular. Incluso aquí, la etiqueta TypeScript tiene más de 4K seguidores y es raro tener una pregunta sin respuesta.

El gran problema con TypeScript, al menos para nosotros es que desde el tiempo a tiempo, decidimos usar un componente o una biblioteca que no tiene las definiciones de tipo, por lo que tenemos que crearlas nosotros mismos. Pero supongo que es una forma de contribuir a la comunidad.

 18
Author: thitemple,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-26 19:01:59

Acabo de hacerme la misma pregunta (aunque no con React) y encontré los siguientes artículos útiles para evaluar los dos:

El enfoque adoptado por los diseñadores de flujo se siente más funcional con una mejor inferencia de tipos y un mejor enfoque para los nulos. Sin embargo, TypeScript tiene un mejor soporte de la comunidad, especialmente con respecto a la extracción de tipos para bibliotecas de terceros a través de http://definitelytyped.org / que es importante para que los tipos fluyan a través de todo el código para una máxima seguridad de tipos. TypeScript es creado por Microsoft que tiene una rica historia en la escritura de compiladores y la evolución de la tecnología en direcciones favorables-notable aquí es C# y el hecho de que ya son añadir tipos no nulos (2016-07-11): https://blogs.msdn.microsoft.com/typescript/2016/07/11/announcing-typescript-2-0-beta /

TypeScript parece la apuesta más segura hoy.

Y para aquellos que prueban TypeScript en una base de código existente, encontré la siguiente configuración en mi tsconfig.archivo json realmente útil para permitir que TypeScript coexista muy bien con JavaScript (permitiendo la transición de un archivo a la vez):

{
    "compilerOptions": {
        "allowJs": true,
        "isolatedModules": true,
        ...
    }
}
 6
Author: Spritely,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-28 16:39:59

En mi desarrollo de React, tengo un complejo Babel / Webpack / Flujo / Mocha la cadena de herramientas se configuró y nunca tuvo ningún problema con el flujo. Toma un poco de esfuerzo para configurar todo (Webpack puede ser desalentador al principio), pero después, simplemente funciona. El flujo es definitivamente el camino a seguir, ya que es una tecnología más estrecha y más enfocada y, como tal, es más probable que juegue bien con otras herramientas. En contraste, TypeScript intenta ser mucho más que una mera inferencia de tipos / herramienta de comprobación de tipo estático y, por lo tanto, trae equipaje adicional y suposiciones. Así que React es una herramienta especializada que hace una cosa bien, mientras que TypeScript es efectivamente un lenguaje superpuesto a JavaScript. Para asegurarse de que Microsoft conduce a su punto de inicio, los archivos TypeScript habitualmente tienen una extensión diferente, así (.ts en lugar de .js) porque ahora está utilizando un idioma diferente, lo consiguió?

TypeScript utiliza la generación de código para escupir JavaScript mientras que en Flow las anotaciones simplemente se quitan, no hay generación de código como tal. En el pasado, la gente de Microsoft que promocionaba TypeScript solía hacer una declaración en el sentido de que la generación de código es "archivo-local" (no recuerdo la terminología exacta utilizada). Se suponía que esto proporcionaría una tranquilidad tranquilizadora de que el compilador de TypeScript no está haciendo nada demasiado mágico. En cualquier caso, no puedo encontrar que esa declaración se muestre prominentemente más. Con Flow usted no necesita tales garantías como usted escribe en llano JavaScript (o cualquier versión de ECMA para la que haya configurado Babel) y las anotaciones son, como dije, simplemente eliminadas.

Sin mencionar que TypeScript proviene de una compañía que se especializa en prácticas técnicas poco éticas y cuestionables (no descarto que TypeScript eventualmente pueda resultar ser la Madre de todas las tácticas de Abrazar-Extender-Extinguir). No olvidemos que Microsoft hizo todo lo posible para hacer que Javascript fallara como ellos (con razón, si tardíamente) previó la amenaza que representaba, y todavía representa, para su sistema operativo de mierda y su suite de oficina hinchada.

Además, el sistema de tipos de Flow era mucho más poderoso la última vez que me molesté en evaluar TypeScript (circa 2015) y era mucho más fácil aplicarlo de forma incremental o incluso esporádica en las fuentes. Para integrar bibliotecas de terceros estoy usando flowtyped y es muy raro que necesite complementar las que se encuentran allí con mis propias definiciones.

Finalmente, el hecho de que Angular use TypeScript no significa absolutamente nada, ya que Angular no es realmente relevante para nuevos proyectos. React ha ganado sin duda, es hora de seguir adelante.

 0
Author: Marcus Junius Brutus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-02 00:53:23