Historias y Estrategias de la Conversión a TypeScript

Rate this content
Bookmark

TypeScript es genial, pero migrar una aplicación existente a él puede ser un dolor de cabeza. Codecademy tomó múltiples aplicaciones React existentes y las convirtió a TypeScript. Cubriremos cómo hacer que ese tipo de conversiones sean exitosas desde puntos de vista tanto culturales como técnicos.

20 min
14 May, 2021

Video Summary and Transcription

Esta Charla discute el proceso de conversión a TypeScript en CodeCademy. Se enfatiza la importancia de fomentar la adopción y el intercambio de conocimientos dentro del equipo. La Charla también destaca la integración perfecta de TypeScript en la infraestructura y el sistema de construcción existentes. La estrategia para la conversión a TypeScript involucró el uso de solicitudes de extracción dedicadas y herramientas automatizadas. El orador comparte consejos sobre la automatización de cambios, la configuración de una guía de estilo y la celebración de victorias. También se mencionan recursos para aprender TypeScript.

Available in English

1. Introduction to Converting to TypeScript

Short description:

Hola, y bienvenidos a historias y estrategias de la conversión a TypeScript conmigo, Josh Goldberg. Para empezar, hola, soy de Upstate New York. Soy un desarrollador de front-end en el equipo de plataforma web en Code Academy, anteriormente Microsoft, y soy un papá de gatos. Comenzando, ¿dónde estaba CodeCademy antes de TypeScript? Retrocedamos hasta principios de 2019, una época más sencilla. Teníamos una aplicación principal de front-end, que en ese momento consistía en alrededor de 2,000 archivos de React y Redux, algunos archivos más en un sistema de diseño separado, que en sí mismo se convirtió a TypeScript como prueba de concepto, y la mayoría de los miembros del equipo solo habían oído vagamente hablar de TypeScript.

Hola, y bienvenidos a historias y estrategias de la conversión a TypeScript conmigo, Josh Goldberg.

Para empezar, hola, soy de Upstate New York.

Soy un desarrollador de front-end en el equipo de plataforma web en Code Academy, anteriormente Microsoft,

y soy un papá de gatos.

Mi esposa y yo tenemos algunos gatos.

Son muy lindos.

Todo el contenido de esta presentación está disponible en mi sitio web bajo el enlace de las diapositivas en esta charla en joshuakgoldberg.com.

Esta presentación incluye varias imágenes animadas en bucle.

Si te distraen, te recomendaría verlas en PowerPoint, que te permite pausarlas.

En cuanto a la agenda, primero vamos a hablar sobre Code Academy en 2019 antes de dar el salto a TypeScript, cómo tomamos esa decisión de pasar a TypeScript, algunas de las técnicas que utilizamos para compartir conocimientos en el equipo, los detalles técnicos de lo que hicimos para hacer ese cambio, y luego algunas de las lecciones que aprendimos al final del proceso, cosas que tal vez puedas utilizar en tus conversiones, espero. Buen material.

Comenzando, ¿dónde estaba CodeCademy antes de TypeScript?

Retrocedamos hasta principios de 2019, una época más sencilla.

Teníamos una aplicación principal de front-end, que en ese momento consistía en alrededor de 2,000 archivos de React y Redux, algunos archivos más en un sistema de diseño separado, que en sí mismo se convirtió a TypeScript como prueba de concepto, y la mayoría de los miembros del equipo solo habían oído vagamente hablar de TypeScript.

No había un gran tema o punto de conocimiento en el equipo.

El equipo en sí era bastante pequeño.

Eran solo alrededor de 20, tal vez 30 ingenieros como máximo.

La mayoría de las personas realmente no tenían experiencia con TypeScript y, como en cualquier equipo de ingeniería, había trabajo en curso en torno a características y correcciones de errores.

Entonces, ¿cómo lo hicimos?

¿Cómo hicimos ese cambio a TypeScript?

Primero, tomamos la decisión de que queríamos hacerlo en primer lugar, y cuando hay voluntad, hay una manera, pero tiene que haber voluntad.

Cualquier cambio arquitectónico debe contar con el apoyo informado de sus constituyentes.

Creo que mucha gente, especialmente aquellos que son nuevos en un equipo, cometen el error de tratar de sacar conclusiones de inmediato y empujar una agenda, enviar propuestas, lo cual muchas veces es un error hacerlo de inmediato.

Es una buena idea absorber las experiencias de ser un desarrollador en el equipo, hablar con la gente, tener una idea de cuáles son los problemas reales, y luego utilizar eso para informar tus decisiones sobre qué impulsar y cómo.

No me malinterpretes.

No estoy tratando de menospreciar el hecho de entrar en un equipo con una perspectiva fresca e intentar hacer que la gente entienda y escuche esa perspectiva.

Eso es genial.

Eso es encomiable.

Los equipos definitivamente deberían estar abiertos a que llegues con ideas frescas, pero esas ideas frescas y perspectivas tienen muchas más posibilidades de tener éxito si las validas con quienes te rodean, si puedes convencer a las personas de su validez.

Así que no seas un malcriado.

Definitivamente habla con la gente antes de intentar presionarlos para que hagan cosas.

Si realmente quieres presionar a la gente para que haga cosas, te recomiendo encarecidamente que crees algún tipo de ambiente emocionante para ello.

Si hay algún cambio que quieras hacer, como TypeScript, quieres que la gente lo sienta.

Deberían estar emocionados en sus huesos.

2. Fomentando la adopción de TypeScript

Short description:

Esto es increíble. Esto va a hacer mi vida más feliz y mejor, el código va a funcionar, va a ser increíble, quiero hacerlo. Esa es la sensación que quieres transmitir con algunas de las decisiones más importantes que quieres impulsar en el equipo. Parte de la forma en que lo hicimos fue alentar a las personas a pensar en cómo TypeScript ayuda a sus objetivos existentes, siempre es una buena idea.

Esto es increíble. Esto va a hacer mi vida más feliz y mejor, el código va a funcionar, va a ser increíble, quiero hacerlo. Esa es la sensación que quieres transmitir con algunas de las decisiones más importantes que quieres impulsar en el equipo.

Parte de la forma en que lo hicimos fue alentar a las personas a pensar en cómo TypeScript ayuda a sus objetivos existentes, siempre es una buena idea. Mi imagen favorita de la fase de evangelización de nuestra versión de TypeScript al comienzo fue anunciarlo como parte del embudo de adquisición de errores, como lo llamamos, o el antifunnel. No dibujado a escala ya que no hay una escala confiable aquí. Ninguna parte de esto, ya sea la revisión de código o lo que sea, puede prevenir realmente todos los errores, pero juntos pueden ayudar a reducir los errores y los bloqueos en los sitios. Eso fue una gran parte del plan del equipo a principios de 2019, algo en lo que queríamos mejorar, la estabilidad, no tener errores y peculiaridades molestas. TypeScript es una de las características principales de TypeScript, y te ayuda a encontrar errores temprano.

3. Ramping up the Team and Knowledge Sharing

Short description:

Una vez que decidimos hacerlo, necesitamos preparar al equipo. Identificamos dos arquetipos: expertos en el área y animadores. Los expertos en el área pueden introducir las mejores prácticas, explicar TypeScript y salvar al equipo de errores obvios. Los animadores, aunque tengan menos experiencia, pueden actuar como conejillos de indias y ayudar a difundir la nueva tecnología. Se recomienda tener al menos uno o dos animadores por área del equipo y al menos dos expertos en el área para validación e intercambio de ideas.

Entonces, una vez que decidimos hacerlo, necesitamos preparar al equipo. Compartir conocimientos, como ellos lo llaman. Esto fue especialmente valioso antes de tomar la decisión, donde queríamos que las personas entendieran lo que significaba para que pudieran contribuir de manera significativa a la conversación. Identificamos aproximadamente dos arquetipos de personas en el equipo. En primer lugar, teníamos a los expertos en el área, alguien como yo que ya está muy emocionado y familiarizado con TypeScript. Puedo decirlo. Son el tipo de persona que puedes usar para informar al equipo sobre la tecnología, introducir mejores prácticas, explicarla a los demás, establecer los materiales de aprendizaje adecuados. Son la persona que puede salvar al equipo de sí mismos, evitando caer en los errores obvios que tú conoces por haberlo hecho antes. También son útiles y muy valiosos en el equipo los animadores, personas que pueden no tener tanta experiencia con, digamos, TypeScript, pero que aún están muy emocionados y quieren impulsarlo y están de acuerdo con ello. Estas son las personas que pueden actuar como conejillos de indias, que lo probarán, tus primeros adoptantes o probadores beta, como los llaman. Pueden ayudar a difundirlo entre el equipo de manera mucho más efectiva que tú, porque hay muchos de ellos, a menudo, si la decisión es emocionante y nueva. Así que recomiendo tratar de tener al menos uno o dos animadores por área del equipo para que puedan difundir la alegría de la nueva cosa entre el área del equipo. Al menos en Codecademy y muchas otras empresas que he visto, los equipos de producto tienden a hablar mucho entre sí. Así que si puedes tener al menos una persona en esa mezcla, eso es muy útil para introducir una nueva tecnología. Para los expertos en el área, es útil tener al menos dos, porque si solo tienes uno, no tienen un compañero que realmente pueda validar lo que están haciendo, al menos desde la experiencia previa. Así que es útil tener al menos dos que puedan intercambiar ideas entre ellos.

4. Knowledge Sharing and Code Changes

Short description:

Parte del intercambio de conocimientos para nosotros fue a través de presentaciones internas, incluyendo charlas informales, análisis estático en JavaScript y charlas relámpago. Las sesiones de emparejamiento con miembros del equipo enfocados en el frontend también fueron valiosas. Mantener los cambios de código mínimos y comenzar con la conversión de algunos archivos aseguró una transición sin problemas sin interrumpir al equipo.

Parte del intercambio de conocimientos para nosotros, una vez que identificamos a los responsables del área y a los animadores, fueron las presentaciones internas porque nadie hace nada hasta que haya una charla que explique la idea general, el espíritu del movimiento del equipo hacia ella. Realizamos dos charlas informales, que tu equipo podría llamar charlas de tiza o charlas de almuerzo o algo similar presentaciones.

La primera fue el análisis estático en Javascript. Fue una introducción general al concepto de analizar el archivo sin ejecutar y descubrir qué está mal o bien en él. Y honestamente, ni siquiera hablamos tanto de TypeScript. Fue principalmente sobre las herramientas existentes que ya estábamos usando para que las personas se pusieran en el estado mental correcto, principalmente las más tempranas.

Después de eso, tuvimos la charla realmente emocionante, cuando estaba feliz por TypeScript, que fue específicamente sobre qué es TypeScript y cómo se verían las características que usaríamos. También participamos en las charlas relámpago existentes del equipo, que eran una serie de unas pocas personas hablando cada semana, alrededor de cinco minutos, sobre cualquier tema aleatorio. Estas fueron particularmente útiles para los temas más esotéricos de TypeScript que podrían ser interesantes o lindos pero no del todo útiles para la mayoría de las personas que intentan decidir si usarlo o adoptarlo. Las presentaciones son realmente útiles porque las personas pueden verlas después y repasar el contenido.

Las interacciones individuales más valiosas, creo, fueron emparejarse con personas porque nadie realmente aprende algo hasta que se ve obligado a hacerlo, al menos en mi experiencia. Y la generalización fue útil. Al menos para mí, si no he escrito un lenguaje o no he usado un marco de trabajo, no realmente lo entiendo hasta que lo hago. Así que programé al menos una sesión de emparejamiento con cada miembro del equipo enfocado en el frontend, que en ese momento eran alrededor de una docena, un poco más. En estas sesiones, nos emparejábamos, uno codificaba en TypeScript y el otro supervisaba. No fue escalable. Intentaría hacerlo ahora que el equipo es de más de 50-60 personas. Eso sería realmente doloroso. Pero en ese momento, fue útil y creo que fue una de las formas más importantes y relevantes de incorporar a las personas a TypeScript. Lo recomiendo encarecidamente, especialmente si puedes ampliarlo con más responsables del área.

En cuanto a los detalles técnicos, los cambios de código literales que hicimos, los mantuvimos al mínimo posible. Y esta es una estrategia que recomendaría encarecidamente para cualquier conversión a TypeScript. No quieres empezar con una solicitud de extracción de varios miles de archivos que convierta todo bajo el sol. Eso es muy fácil de romper y muy difícil de ajustar para conflictos de fusión. Así que comenzamos con la conversión mínima de las integraciones de infraestructura con solo unos pocos archivos, convirtiéndolos a TS o TSX, solo para asegurarnos de que funcionara. Esto fue bueno por varias razones. En primer lugar, la solicitud de extracción inicial no interrumpió al equipo en absoluto. No tuvimos que detener las implementaciones ni nada para avanzar. Tampoco cambiamos mucho a las personas con eso. Nadie se vio afectado por ello.

5. Introducing TypeScript into the Infrastructure

Short description:

Pudimos introducir TypeScript sin problemas en nuestra infraestructura, ya que la mayoría de las herramientas que utilizamos ya tenían soporte incorporado o integración fácil. Babel, nuestro ejecutor de pruebas y constructor de producción, tenía un conjunto de ajustes de TypeScript que funcionaba como magia. ESLint, con el que estoy familiarizado, también funcionaba muy bien con TypeScript. Y la mejor parte fue que Prettier admitía TypeScript de forma nativa sin necesidad de ninguna configuración.

Pudimos esperar para presentar TypeScript a las personas hasta que fuera el momento adecuado, hasta que pudiéramos emparejarnos con ellos o hasta que ya se sintieran más cómodos con las ideas. Y, sinceramente, la infraestructura no fue un cambio tan grande en esta solicitud de extracción. Prácticamente todo lo que usamos ya tenía una inclusión básica de TypeScript, ya sea incorporada o algo que se puede obtener fácilmente en línea. Nuestro ejecutor de pruebas y nuestro constructor de producción, Justin Roepack, respectivamente, tenían dependencia de Babel para compilar el código, y Babel tiene un conjunto de ajustes de TypeScript realmente bueno, el conjunto de ajustes de Babel para TypeScript. Así que simplemente lo usamos y funcionó como por arte de magia. ESLint tiene TypeScript ESLint, un proyecto al que a veces contribuyo, por lo que estoy bastante familiarizado con él, y también funcionó muy bien. Las ejecuciones de ESLint nos llevan un poco más de tiempo porque incluimos el verificador de tipos, y eso está bien. Aún así, todo funciona. Curiosamente, Prettier ni siquiera tiene un paso de configuración que necesitáramos usar. Simplemente admite TypeScript automáticamente de forma nativa. Esa fue mi parte favorita. No tuvimos que hacer nada al respecto. Fue genial.

6. Introducing TypeScript into the Build System

Short description:

Introdujimos TypeScript en el sistema de compilación con la facilidad de adopción en mente. Solo usamos TypeScript como un verificador de sintaxis y tiempo de compilación, sin interrumpir a los ingenieros con código heredado. Si bien inicialmente no habilitamos la configuración 'no implicit any', más tarde convertimos los archivos en 'null implicit any'. Sin embargo, habilitamos las comprobaciones estrictas de nulos desde el principio.

Una vez que introdujimos TypeScript en el sistema de compilación, priorizamos la facilidad de adopción en lugar de hacer todo de forma rápida y repentina en TypeScript. Así que tratamos de no ser demasiado disruptivos para las personas. Exclusivamente usamos TypeScript como una sintaxis y un verificador de tiempo de compilación. No lo utilizamos para verificar código JavaScript o cosas existentes que no eran TypeScript. No queríamos interrumpir a los ingenieros con mensajes sobre código heredado que aún no estaba destinado a ser TypeScript. Por lo tanto, no había necesidad de verificar JS, como se llama la opción del compilador.

Tampoco activamos la configuración del compilador 'no implicit any', que es muy útil, desafortunadamente. Es difícil en una base de código mixta de TypeScript y JavaScript. Si un archivo importa desde un archivo JavaScript y quieres convertirlo a TypeScript, entonces a veces tienes que convertir todas sus dependencias para configurar correctamente esos tipos. Y eso es simplemente molesto. Terminamos utilizando un proceso similar más adelante para convertir gradualmente los archivos en 'null implicit any'.

Por otro lado, sí pudimos habilitar fácilmente las comprobaciones estrictas de nulos desde el principio. Un concepto muy simple, no considerar nulo y indefinido como asignables a otros tipos. Y fue muy útil. Así que sí, lo obtuvimos desde el principio. Maravilloso.

7. Converting to TypeScript Strategy and Tools

Short description:

Utilizamos solicitudes de extracción dedicadas para convertir a TypeScript, centrándonos en áreas específicas e involucrando a los ingenieros según la propiedad. Estas solicitudes de extracción brindaron una gran oportunidad para aprender y compartir conocimientos. También desarrollé un script para verificar el lenguaje de los commits antiguos, lo cual nos ayudó a rastrear el progreso de la conversión. La conversión tomó 259 días, priorizando la comodidad sobre la velocidad. Una de mis herramientas favoritas, Typestep, aplica automáticamente las conversiones en los archivos, lo que hace que el proceso sea más eficiente. Es de código abierto y puede generar representaciones de TypeScript de los tipos de propiedades.

A medida que avanzábamos en el tiempo, adoptamos una estrategia de solicitudes de extracción dedicadas, en su mayor parte, para convertir a TypeScript. Ocasionalmente, un miembro del equipo se emocionaba y convertía algo a TypeScript como parte de una solicitud de extracción existente, pero en su mayor parte, simplemente convertíamos áreas a TypeScript. Esto nos permitió enfocarnos en áreas específicas y centrar esas solicitudes de extracción solo en TypeScript, lo que hacía un poco más claro cuáles eran los cambios. En la mayoría de los casos, o muchos casos, no hubo cambios reales en tiempo de ejecución. Y nos ayudó a comprender qué ingenieros involucrar según las áreas de propiedad.

Esto también fue una gran oportunidad de aprendizaje para la mayoría del equipo. En cada una de estas solicitudes de extracción, explicamos todas las nuevas piezas potencialmente confusas de sintaxis con comentarios en la solicitud de extracción, agregamos un tipo aquí porque, etc. Luego, cuando las personas revisaban las solicitudes de extracción, casi instintivamente tenían que leer estos comentarios, lo cual fue bastante agradable. Así que recomiendo encarecidamente las solicitudes de extracción dedicadas como una forma de ayudar a compartir conocimientos después de la colaboración.

Más adelante, escribí un pequeño script que ejecutaba el comando Git checkout en cada uno de nuestros commits antiguos y verificaba los archivos JS versus los archivos TS para ver cuál era el lenguaje de cada uno. Como puedes ver, con el tiempo, imprime el crecimiento porcentual, lo cual fue bastante ingenioso. Comenzamos la conversión el 2 de abril de 2019, al día siguiente de nuestro lanzamiento del 1 de abril, que fue un curso de código de leyes completamente funcional, que es un lenguaje de programación basado en el uso de Internet y gatos, uno de mis favoritos. La conversión nos llevó aproximadamente 259 días hasta el 17 de diciembre, lo cual está bien. Si hubiéramos querido, podríamos haber priorizado movernos más rápido, pero queríamos optimizar la velocidad. Lo siento, la lentitud, la comodidad sobre la velocidad, algo que recomiendo encarecidamente. No asumas que tienes que pasar a TypeScript de inmediato. Es probable que puedas convertir parte de tu base de código, áreas de alto valor, antes como una forma de prepararte para más adelante.

Mi parte técnica favorita fue Typestep, que es una herramienta que escribí que aplica automáticamente conversiones deducibles o evidentes en masa. Por ejemplo, si un componente de React declara sus prop types con el paquete properties, a veces puedes crear automáticamente un tipo o interfaz de TypeScript solo con mirar el archivo. Es una herramienta bastante involucrada. Aún está en una etapa temprana, tiene muchos errores, pero es de código abierto. Recomiendo encarecidamente echarle un vistazo si quieres usar algo similar para tus conversiones de tipos. Me llevó muchas horas escribirlo, pero nos está ahorrando mucho tiempo hasta el día de hoy para nuestras conversiones. Así que estoy bastante satisfecho con ello. Probablemente podría dar una charla completa, pero no tenemos el tiempo ni el enfoque para esta ocasión. Este es un ejemplo para reiterar, si usas prop types, podríamos leer tu archivo y escribir un script que analice el texto para comprender qué tipo de prop es, es una lista de props y para cada uno de ellos, cuál es el tipo. Y luego podrías imprimir de vuelta al archivo la representación de TypeScript de eso. Es un poco más complicado para los componentes que no declaran sus prop types propias. Tienes que usar el comprobador de tipos para encontrar todas las referencias al componente para ver qué tipos y nombres tienen todas las props proporcionadas en todas esas referencias, y luego combinar todo eso, que es algo que hace Typestat.

8. Automatización de cambios y configuración de guía de estilo

Short description:

Entonces, nuevamente, un poco más complicado, pero aún factible. Automatiza todo y cualquier cosa siempre que sea posible. Configura una guía de estilo y aprende preguntas preventivas. No conviertas y cambies al mismo tiempo. Los ingenieros de TypeScript tienen esta fobia de escribir la palabra any porque piensan que hace que el código sea menos bueno.

Entonces, nuevamente, un poco más complicado, pero aún factible. Así que piensa en los casos extremos y observa Typestat si estás interesado. De todos modos, aprendimos mucho y quedé muy satisfecho con el proceso. Así que me gustaría compartir eso contigo ahora, si está bien. Para empezar, automatiza todo y cualquier cosa siempre que sea posible. Ya sea una configuración realmente compleja como Typestat o simplemente un pequeño script de bash o Node que escribas para hacer el 70% del trabajo obvio. Nos apoyamos en esto para la gran mayoría de los cambios. Mis PR favoritas, las más fluidas, se generaron con Typestat para el 80 al 90% del trabajo, y luego las ajustamos a mano para que fueran correctas. Verificar dos veces. Quiero decir, ¿por qué hacer cosas cuando puedes escribir un script para hacerlo por ti? Además, solo por trabajar con ingenieros, recomiendo encarecidamente configurar una guía de estilo y aprender qué preguntas harían las personas de manera preventiva. Preguntas como, ¿deberías usar una interfaz o un tipo? ¿Cómo declaras las props de React? ¿Qué significa este error común y confuso? Eso se va a preguntar. Se preguntará una y otra vez y desde el principio, así que sé proactivo. Habla con las personas con anticipación y averigua qué es lo que realmente necesitas cubrir y que te preguntarán repetidamente. Una guía de estilo es una excelente manera de responder muchas de estas preguntas y tener una sección de preguntas frecuentes al final. Definitivamente aprendimos de la manera difícil y lo siento si eres un usuario de Code Academy en 2019 y rompimos este sitio o agregamos un error para ti. No conviertas y cambies al mismo tiempo. Cualquier PR importante que cambie toda un área de TypeScript es algo difícil de revisar y es especialmente difícil si también introduces cambios en tiempo de ejecución. Así que recomiendo encarecidamente mantenerlos separados. Si ves un cambio que realmente quieres hacer para TypeScript, simplemente anótalo, guárdalo para más tarde. Resiste la tentación. Sé compasivo incluso en tu revisión de código o para alguien que ahora tiene que pasar por tu PR y QA cambios además de tal vez aprender TypeScript. Eso es un gran desafío. Muchos ingenieros, especialmente en relación con TypeScript, no les gusta tomar atajos. No les gustan los atajos intelectuales. Debería decir. No les gusta hacer las cosas de manera incorrecta. Los ingenieros de TypeScript tienen esta fobia de escribir la palabra any porque piensan que eso hace que el código sea menos bueno. Tal vez solo tengas que hacer una conversión a any, como estábamos usando Redux, lo cual está bien. Redux por sí solo es un sistema hermoso y muy compatible con el sistema de tipos. Pero cuando tienes todas estas integraciones, como nosotros, acciones de Redux, doggos, thunks, se vuelve realmente difícil escribir los tipos.

9. Reflexiones Finales y Recursos

Short description:

Nos llevó meses de trabajo llegar a la misma versión de typings para Redux debido a las dependencias interconectadas. Aún convertimos gran parte de nuestro código de Redux en TypeScript. Celebra tus victorias y haz un gran evento al convertir a TypeScript. Visita TypeScriptland.org y CodeCademy.com para obtener recursos sobre TypeScript. Gracias por escuchar!

Nos llevó meses de trabajo en segundo plano llegar a la misma versión de typings para Redux debido a todas las extrañas dependencias interconectadas. Y aún convertimos gran parte de nuestro código de Redux en TypeScript porque simplemente no tenemos tiempo o interés en hacerlo al 100% correctamente. Así que simplemente convierte, está bien. La elección entre convertir y no convertir a TypeScript debería ser bastante clara, simplemente conviértelo y guárdalo para más tarde. Opiniones.

Por último, celebra tus victorias. Gastamos un poco del presupuesto de la oficina en esta tarta y fue algo divertido para el ánimo de, oh, hicimos algo genial. Convertimos a TypeScript. Terminamos. Y fue en diciembre. Ayuda a señalar al equipo cuando haces algo lindo y memorable al final. Recomiendo encarecidamente hacer un gran evento al respecto. Si el tren de la emoción, como podrías haberlo llamado, termina su viaje, celebra su llegada a la estación como una analogía. Irónicamente, creo que la tarta era de vainilla al final.

De todos modos, aquí tienes algunos recursos que podrían ser útiles para ti. El sitio web TypeScriptland.org. Un saludo a nuestro amigo, Orta, es realmente bueno. Tiene mucha documentación excelente, explica muchas cosas buenas sobre TypeScript. Puede ayudarte como nuevo implementador, usuario experimentado o convertidor. De hecho, terminamos escribiendo un curso sobre TypeScript, en el que ayudé como co-líder en la concepción, CodeCademy.com, aprende TypeScript. Lo recomiendo mucho, soy un gran fan. Y luego cada una de las integraciones que mencioné, la guía de Babelius Lynch para webpack tiene su propia guía para usar TypeScript porque es muy popular. Así que recomiendo encarecidamente visitar esos recursos. De todos modos, gracias por escucharme. He estado respondiendo preguntas en el chat a medida que surgen. Y siempre puedes enviarme un tweet o ver mi información de contacto en mi sitio, ambos son joshuakagleberg. Gracias. Que tengas un excelente resto de la conferencia y muchas gracias a los organizadores de la conferencia.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2022React Summit 2022
20 min
Routing in React 18 and Beyond
Top Content
Concurrent React and Server Components are changing the way we think about routing, rendering, and fetching in web applications. Next.js recently shared part of its vision to help developers adopt these new React features and take advantage of the benefits they unlock.In this talk, we’ll explore the past, present and future of routing in front-end applications and discuss how new features in React and Next.js can help us architect more performant and feature-rich applications.
React Advanced Conference 2021React Advanced Conference 2021
27 min
(Easier) Interactive Data Visualization in React
Top Content
If you’re building a dashboard, analytics platform, or any web app where you need to give your users insight into their data, you need beautiful, custom, interactive data visualizations in your React app. But building visualizations hand with a low-level library like D3 can be a huge headache, involving lots of wheel-reinventing. In this talk, we’ll see how data viz development can get so much easier thanks to tools like Plot, a high-level dataviz library for quick & easy charting, and Observable, a reactive dataviz prototyping environment, both from the creator of D3. Through live coding examples we’ll explore how React refs let us delegate DOM manipulation for our data visualizations, and how Observable’s embedding functionality lets us easily repurpose community-built visualizations for our own data & use cases. By the end of this talk we’ll know how to get a beautiful, customized, interactive data visualization into our apps with a fraction of the time & effort!

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn