Búsqueda de sitios web

javascript - 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 respecto al desarrollo de aplicaciones React robustas: ¿qué herramientas utilizan los desarrolladores para la verificación de tipos estáticos?

Me gusta mucho TypeScript. Creo que reduce bastante el dolor de desarrollar aplicaciones en JavaScript, gracias a la comprobación de tipos y a otras funciones interesantes. Visual Studio Code también ofrece una autocompletación de código muy buena. Y sé que puedo hacerlo funcionar con React usando typings + DefinitelyTyped.

El hecho es que no hay muchos tutoriales sobre cómo usar React + TypeScript. Tampoco parece haber muchos artículos sobre el desarrollo usando esta combinación. Por otro lado, parece que muchas personas están usando Flow, que es un proyecto respaldado por Facebook (y supongo que ellos también lo usan).

He logrado encontrar una discusión en Reddit con pros y contras sobre optar por la combinación React + TypeScript/React + Flow. Sin embargo, para mí, parece estar bastante desactualizada 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 menciona algunos problemas con los que se 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 desarrolladores de Facebook. También menciona que no funciona bien con Babel?

Entonces, supongo que la pregunta sería: ¿Es seguro usar la combinación de React + TypeScript, o me encontraré con algunas dificultades? ¿Qué pasa con Flow? ¿Hay otras herramientas similares que debería revisar? ¿Qué enfoque recomendarías?

Actualización septiembre 2017:

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

  • TypeScript sigue siendo doloroso de usar hasta el día de hoy. El problema es que el mundo de JavaScript avanza tan rápido que TypeScript siempre se queda atrás. ¿Pensando en usar esa nueva y elegante característica de ES7 etapa 3? No, no puedes. ¿Deseando obtener sugerencias de tipos para la última versión de alguna biblioteca? Espera un mes, o dos, tal vez más...
  • Flow ha avanzado mucho, se ha mejorado bastante, puede detectar algunas cosas que TypeScript no puede. Lo mejor de todo es que finalmente funciona en Windows. Además, hay un gran plugin 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 ni siquiera llega al 50 % allí todavía.
  • La mayor parte del tiempo, no necesitas tipos en absoluto. Todo el tipeo adicional rara vez vale la pena. JS es un lenguaje de tipado dinámico, supéralo :)

TL;DR: Si planeas usar cualquier tipo de verificador, recomiendo usar Flow.

Actualización febrero 2019:

Creo que la recomendación anterior se ha quedado desactualizada y ya no es relevante. Tres razones:

  • Los Hooks de React han llegado. Hacen que la verificación de tipos en tu código sea mucho más fácil. En la mayoría de las situaciones, no se necesita código adicional.
  • La inferencia de tipos de TypeScript ha mejorado.
  • TypeScript tiene una comunidad mucho más grande que Flow. Incluso yarn, el gestor de paquetes de Facebook, se está alejando de Flow hacia TypeScript.

Entonces, creo que TypeScript es una opción mucho más pragmática que Flow en 2019.

En cuanto a si vale la pena usar algún tipo de verificador de tipos en absoluto, diría que depende del tamaño del proyecto. Probablemente los proyectos pequeños no lo necesiten.

Respuesta #1

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 ya conoces, como la refactorización, la seguridad de tipos, la autocompletación, etc.

Claro, por lo que he visto, la sintaxis de Flow es más limpia que la de TypeScript, pero puedes agregar tus tipos usando TypeScript de manera incremental. Creo que esto es más una cuestión de gusto. A algunas personas les gusta tener el código explícitamente tipado, a otras les gusta tipar menos y tener una inferencia de tipos más fuerte.

Sobre las tecnologías, diría que TypeScript es una apuesta segura, Microsoft está impulsando el lenguaje (habrá una versión 2 pronto), Angular también lo está utilizando y hay muchos desarrolladores de Angular. Incluso aquí en SO, 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 de vez en cuando 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 esa es una forma de contribuir de nuevo a la comunidad.

Respuesta #2

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

  • http://michalzalecki.com/typescript-vs-flow/ (2016-07-15)
  • https://blog.wearewizards.io/flow-and-typescript-part-2-typescript (2015-11-20)
  • https://blog.wearewizards.io/flow-and-typescript-part-1-flow (2015-11-13)

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

TypeScript parece la opción más segura hoy.

Y para aquellos que están probando TypeScript en un código existente, encontré que los siguientes ajustes en mi archivo tsconfig.json fueron realmente útiles para permitir que TypeScript coexista bien con JavaScript (permitiendo la transición un archivo a la vez):

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

Artículos relacionados