¿Debo usar el mecanografiado? o simplemente puedo usar ES6? [cerrado]

286

Mi trabajo diario es desarrollador de clientes con AngularJS. Estamos evaluando si queremos usar TypeScript. Investigué un poco sobre el mecanografiado y casi todos los paquetes de JavaScript que necesito deben tener archivos de tipo de definición. Descubrí que no es muy conveniente, especialmente si me gustaría probar algo nuevo y no tienen la definición para ello. Es realmente frustrante. (Incluso la definición actual de jQuery me da algunos problemas si quiero usar typecript 1.5 beta). Empecé a mirar ES6 y se parece a TypeScript. ¿Debo usar ES6 en su lugar? Además, escuché que angular 2 tendrá soporte completo para TypeScript, ¿será esa una razón por la que debería permanecer con él?

cjskywalker
fuente
11
No necesita un archivo de definición cada vez para algo nuevo. Si desea usar una biblioteca sin tipo, puede escribir y declare var MyNewLibraryName: any;luego usarla como desee sin que el compilador se queje.
David Sherret
2
Con los votos para cerrar esta pregunta, sugeriría preguntar más sobre los pros / contras asociados con cada enfoque en lugar de preguntar cuál es el mejor, de esta manera está pidiendo información y no opiniones.
Brocco
mecanografiado actualiza la característica de la nueva versión de javascript antes de todos los principales navegadores, mi opción es usar mecanografiado y compilar a la versión de javascript en función de sus navegadores de destino. (por supuesto, incluso es fácil transpilar javascript una versión a otra)
bhv
Si no le molesta poder ejecutar su código correctamente, y desea que Immutable.js sea realmente difícil de trabajar, y le encanta escribir repetitivo, y cree que DRY está sobrevalorado y en realidad prefiere repetirlo, y usted le gusta escribir definiciones de tipo para el código de otras personas, y le gusta administrar los tipos a medida que cambian debajo de usted, y le gusta cambiar entre dos editores de texto diferentes porque nada funciona correctamente, luego elija Tipos de letra. Pero si estás cuerdo, elige ES6 / 7 y Babel.
gigantesco

Respuestas:

114

He estado usando Typecript en mi proyecto angular actual durante aproximadamente un año y medio, y aunque hay algunos problemas con las definiciones de vez en cuando, el proyecto DefinitelyTyped hace un trabajo increíble para mantenerse al día con las últimas versiones de las bibliotecas más populares.

Una vez dicho esto, hay una curva de aprendizaje definitiva cuando se pasa de JavaScript vainilla a TS y debe tener en cuenta la capacidad de usted y su equipo para hacer esa transición. Además, si va a usar angular 1.x, la mayoría de los ejemplos que encontrará en línea requerirán que los traduzca de JS a TS y, en general, no hay muchos recursos sobre el uso de TS y angular 1.x juntos en este momento .

Si planea usar angular 2, hay muchos ejemplos que usan TS y creo que el equipo continuará proporcionando la mayor parte de la documentación en TS, pero ciertamente no tiene que usar TS para usar angular 2.

ES6 tiene algunas características agradables y personalmente planeo familiarizarme más con él, pero en este momento no lo consideraría un lenguaje listo para producción. Principalmente debido a la falta de soporte de los navegadores actuales. Por supuesto, puede escribir su código en ES6 y usar un transpilador para llevarlo a ES5, que parece ser lo más popular en este momento.

En general, creo que la respuesta se reduciría a lo que usted y su equipo se sienten cómodos aprendiendo. Personalmente, creo que tanto TS como ES6 tendrán un buen soporte y un futuro largo, pero prefiero TS porque tienden a obtener características de lenguaje más rápido y en este momento el soporte de herramientas (en mi opinión) es un poco mejor.

Kent Cooper
fuente
40
¿ES6 no tiene soporte de navegador? ¿Eres un político de la EM? Tanto el mecanografiado como el ES6 necesitan un transpilador. Significa que no está ejecutando TS o ES6 en la web, sino que está usando algo como Babel. TS en Angular 2 se agregó solo por un vínculo político entre Google y MS
STEEL
40
@STEEL No, no soy un político de la EM, solo estás respondiendo a una respuesta que dejé hace más de un año cuando el soporte de ES6 era muy limitado. Y es libre de pensar que la decisión de TS y Angular 2 fue política, pero eso no cambia mi punto de vista de que fue escrita para ese idioma y que el equipo de Angular2 está alentando su uso.
Kent Cooper
18
Esto es de hace 2 años, pero el tiempo ha demostrado cómo prevalece finalmente el estándar. ES6 es muy compatible de forma nativa con la mayoría de los navegadores en la actualidad. Clases, funciones de flecha, etc. Finalmente, llegaremos a un punto en el que los navegadores admitirán de forma nativa una versión suficientemente decente de javascript para hacer innecesarios los transpiladores. La mecanografía siempre requerirá un transpilador. ¿Porque es esto importante? porque es nuestro deber como desarrolladores web impulsar la web hacia adelante, y eso es respaldando los estándares
monzonj
3
Es un fastidio ES6 no es compatible con la seguridad de tipo "tiempo de compilación" real. Hay muchas cosas geniales en ES6, pero el hecho de que no pueda decir "este argumento es una cadena (o instancia de clase X), maldita sea" y poder verificarlo como parte de su proceso de compilación sigue siendo malo para programas grandes (front end y back end por igual).
Brad Peabody
Puede usar una herramienta como Flow Type para agregar compatibilidad de tipos a ES6 si realmente lo desea. Hasta que ES6 se vuelva omnipresente en todos los navegadores, su cadena de herramientas consistirá en Flow-> ES6-> Babel, que es una gran indirección, pero hace el trabajo y creo que actualmente es una cadena muy popular.
Prahlad Yeri
660

Árbol de decisión entre ES5, ES6 y TypeScript

¿Te importa tener un paso de compilación?

  • Si - use ES5
  • No, sigue adelante

¿Quieres usar tipos?

  • Si - use TypeScript
  • No: use ES6

Más detalles

ES5 es el JavaScript que conoce y usa en el navegador hoy en día, es lo que es y no requiere un paso de compilación para transformarlo en algo que se ejecute en los navegadores actuales

ES6 (también llamado ES2015 ) es la próxima iteración de JavaScript, pero no se ejecuta en los navegadores actuales. Hay bastantes transpiladores que exportarán ES5 para ejecutarse en navegadores. Sigue siendo un lenguaje dinámico (léase: sin tipo).

Mecanografiado proporciona un sistema de escritura opcional al tiempo que incorpora funciones de futuras versiones de JavaScript (ES6 y ES7).

Nota: muchos de los transpiladores disponibles (es decir, babel, TypeScript) le permitirán usar características de futuras versiones de JavaScript hoy y exportar código que aún se ejecutará en los navegadores actuales.

Brocco
fuente
55
No es tan simple. Hay muchos otros factores.
RaoulRubin 01 de
16
@RaoulRubin Eso es cierto, hay muchos otros factores, pero para una pregunta cerrada aquí al menos proporciona un punto de partida para el proceso de toma de decisiones
Brocco
1
PS - ES6 + FlowType = Love :)
Red2678
3
@RavinderPayal tiene una pregunta interesante, Brocco. Desde una perspectiva de mercado, ¿cuál es el valor de TS vs es5 o es6 y cosas por el estilo?
J.Wells
3
Ok, esta publicación tiene un par de años. Avancemos rápidamente hasta hoy, 28 de septiembre de 2017. ¿La mayoría de los navegadores son compatibles con ES6?
Dewey Banks