Pero ahora queremos representarlo como un elemento de botón y queremos poder pasar un icono adicional. Y aquí nuevamente podemos hacer uso de los genéricos de TypeScript y definir nuestro componente de esta manera. Puedes ver uno de los problemas al trabajar mucho con TypeScript. El código del componente, el código de la biblioteca, comienza a verse bastante complejo, pero estamos logrando una usabilidad muy buena para los usuarios de nuestro componente.
Aquí, por ejemplo, definimos la variable de tipo T-Component. Agregamos esta restricción de que debe ser un tipo de componente. Y luego podemos decir que nuestro componente de enlace recibirá el S-Prop donde podemos pasar cualquier componente y puede recibir todas las props que este componente pasado desea recibir en la interfaz de usuario. Ahora espero que hayas podido ver que sí, el soporte de TypeScript es bueno y todos los frameworks tienen los conceptos básicos del soporte de TypeScript, pero el soporte de TypeScript es más que solo definir los tipos dentro de la lógica de nuestro componente, dentro de nuestras plantillas, también entre los límites entre componentes, pero también hay muchos casos de uso adicionales donde podemos aprovechar TypeScript en nuestros proyectos de React.
Quiero agradecerles por escuchar mi charla, espero que tengan algunas preguntas emocionantes para mí en este momento. Les deseo mucha diversión en la conferencia restante y quiero agradecerles. Muchas gracias.
¿Les gustaría tomar asiento? Tenemos algunas preguntas y estoy bastante seguro de que habrá más preguntas a medida que avancemos. Entonces, una de las primeras, y me gusta esta porque creo que va en contra de todo lo que se supone que TypeScript ofrece. ¿Hay alguna buena excusa para usar el tipo 'any' en tu proyecto? Sí, absolutamente. Lo único que realmente nunca, nunca, nunca debes hacer en tus proyectos es dejar que un 'any' salga de un componente. Es absolutamente aceptable usar 'any' dentro de una función, dentro de un módulo, porque tal vez los tipos, estás construyendo un objeto de búsqueda, por ejemplo, donde aún no conoces todos los campos que estarán presentes en este objeto de búsqueda, entonces, simplemente agrega un 'any' en eso, agrega los campos más tarde, pero asegúrate de que el tipo de retorno de tu función esté correctamente tipado. Pero dentro de un módulo pequeño, simplemente puedes agregar un 'any', tal vez escribir una prueba unitaria para estar absolutamente seguro, pero no hay ningún problema en usarlo dentro de un módulo, pero nunca lo dejes salir del módulo, porque entonces se propagará como un incendio forestal. Nunca dejes que 'any' salga, definitivamente.
Siguiente pregunta, ¿cuándo usarías React Node en lugar de elementos JSX como tipo de retorno? Personalmente, casi siempre usamos React Node porque es un poco más flexible. React Node es básicamente todo lo que se puede renderizar por React, no solo un elemento JSX, sino también null, undefined, true, false, cadenas, números y lo que sea, un poco más flexible. Bien. Y otra pregunta, ¿qué crees que es la parte más débil o más difícil de trabajar con React y TypeScript? Creo que la parte más difícil son los mensajes de error que los tipos te darán. Especialmente tal vez alguno de ustedes, tienen experiencia allí, cuando están trabajando con GraphQL y escriben un generador de código para sus tipos de GraphQL, reciben este objeto tipado masivo que, sí, muestran exactamente qué tipo de campo reciben del backend, pero cuando falta un campo allí, tal vez lo pasas a un componente, falta un campo, el mensaje de error es simplemente, es tan grande y los nuevos desarrolladores tienen, o incluso los desarrolladores intermedios, realmente tienen dificultades para identificar dónde está realmente el error en este mensaje tipado, y esto puede ser realmente confuso, y esto es algo que aún necesita mejorar, como digo. Siempre hay margen de mejora. Y volviendo a la pregunta anterior sobre 'any', ¿cuál prefieres usar, 'any' o 'unknown'? Si absolutamente tienes que hacerlo, obviamente nunca lo dejarás salir del componente. Entonces, diría que dentro de un módulo, elemento, función, lo que sea, diría que está bien usar 'any' porque entonces eres libre de hacer lo que quieras con esa variable. Si tienes un caso en el que esperas algún tipo de variable desde afuera, por lo que estás escribiendo tu propia función de registro, tal vez, y los usuarios pueden suministrar cualquier valor que deseen, usaría 'unknown', porque entonces no puedo usar accidentalmente ningún campo en estos datos, porque no sabré qué datos se están pasando. Por ejemplo, si escribo una función de registro que simplemente dice JSON.stringify, entonces realmente no importa.
Comments