BBVA / open-cells

Open Cells routes & communicates web component applications.
https://opencells.dev
Apache License 2.0
30 stars 8 forks source link

[RFC] migrate core to typescript #16

Closed redfox-mx closed 3 weeks ago

redfox-mx commented 1 month ago

Hola equipo, esta es una RFC para platicar la propuesta de migrar progresivamente a typescript la libreria de core.

Why? Si bien considero que typescript no es la solución a todos los problemas y debe ser usado para todo si creo que añade valor sobre todo en la experiencia de desarrollo (sobre todo en proyectos grandes) y el poder visualizar ciertos errores antes de que pasen. Y creo que estos son puntos claves para mejorar el desarrollo y la arquitectura que se tiene del bridge, sobre todo porque podemos mejorar cosas que typescript nos podría avisar enseguida (eg, el caso del ElementAdapter, que hoy ya no tiene sentido de ser ya que no usa ningún miembro de clase y sencillamente cada metodo puede ser una función pura)

Una de las alternativas que usualmente se da es que no es necesario ya que se tiene JSDoc, pero se tiene una mala concepción de lo que es JSDoc. JSDoc no esta diseñado para ser un sistema de tipos, si no, para añadir y generar documentación. De echo, los tipos que se muestran en los editores no son por JSDoc, si no, por el soporte que tiene typescript para una sintaxis basada en JSDoc https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html fuera de eso, ninguna otra anotación tendra un valor de "tipo".

Otra de las razones para ir en contra es que typescript es mas lento que javascript, pero se nos olvida que TS es solo un superset de JS. No un lenguaje nuevo, si bien, en sus inicios el tsc (typescript compiler) modificaba tu código y generaba helpers que podían hacerlo en ciertos escenarios mas lento, hoy hay herramientas que son enfocadas a solo transpilar el codigo de TS y generar exactamente el mismo codigo, pero de JS, sin añadir mas ni menos. Lo cual reduce a 0 el impacto que puede tener usar o no TS.

Por ultimo es el mantenimiento, pero hay que decirlo, hoy en dia configurar TS se ha vuelto algo trivial para muchos proyectos y para este caso, en lugar de mantener manualmente las definiciones de tipos manualmente y cuidar que si se cambia algo hay que reflejarlo el el codigo y en el ts, el unificar el proyecto proveeria de una unica fuente de verdad.

Es por eso por lo que creo que podria ser de valor una migracion gradual (Se que no es un trabajo facil) y pasar el codigo a ts. Se puede abordar de diversas maneras, y una de las mas faciles y con las que he tenido resultados satisfactorios es migrar modulo por modulo, esot quiere decir que durante un tiempo conviviran ts y js juntos, sin ningún problema. De hecho muchos de los tipos ya se tiene creados y solo bastaria con copiarlos y pegarlos, de tal manera que fuera las mas facil que se puedira, para asegurar la entrega de valor y facilitar su adopcion

jariaspe commented 3 weeks ago

Hola @redfox-mx

Es algo que hemos discutido ampliamente varias veces en el equipo y a día de hoy la migración no nos aporta lo suficiente como para compensar el esfuerzo que habría que invertir. No se descarta a futuro, pero dependerá de las prioridades que nos marquen.

Un saludo.