Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

La única forma de que puedas leer esta frase es abriendo este libro, ya sea física o digitalmente. Esto me dice que estás interesado en TypeScript, uno de los lenguajes de programación más populares de los últimos años. Según la encuesta 2022 State of JavaScript, casi el 70% de los participantes utilizan activamente TypeScript. La encuesta de StackOverflow de 2022 sitúa a TypeScript como uno de los cinco lenguajes más populares y el cuarto en satisfacción de los usuarios. A principios de 2023, TypeScript cuenta con más de 40 millones de descargas semanales en NPM.

Sin duda alguna: ¡TypeScript es un fenómeno!

A pesar de su popularidad, TypeScript sigue dando quebraderos de cabeza a muchos desarrolladores. Luchar contra el corrector de tipos es una frase que se oye a menudo; otra es lanzar un par de any's ahí dentro para que se calle. Algunos se sienten ralentizados, escribiendo sólo para complacer al compilador cuando saben que su código tiene que funcionar. Sin embargo, el único propósito de TypeScript es hacer que los desarrolladores de JavaScript sean más productivos y eficientes. ¿Al final la herramienta no cumple sus objetivos, o nosotros, como desarrolladores, esperamos de ella algo distinto de lo que está diseñada para ofrecer?

La respuesta está en algún punto intermedio, y aquí es donde entra TypeScript Cookbook. En este libro encontrarás más de cien recetas que tratan desde complejas configuraciones de proyectos hasta técnicas avanzadas de tipado. Conocerás las complejidades y el funcionamiento interno del sistema de tipos, así como las compensaciones y excepciones que tiene que hacer para no interferir con su fundamento: JavaScript. También aprenderás metodologías, patrones de diseño y técnicas de desarrollo para crear un código TypeScript mejor y más robusto. Al final, comprenderás no sólo cómo hacer algo, sino también por qué.

Mi objetivo es proporcionarte una guía que te lleve del principiante al experto, así como una referencia rápida que puedas utilizar mucho después de haber leído el libro. Con las cuatro versiones anuales de TypeScript, es imposible enumerar todas las características más actualizadas en un solo libro. Por eso nos centramos en los aspectos más duraderos del lenguaje de programación, para prepararte para todos los cambios que están por venir. Bienvenido al libro de cocina de TypeScript.

A quién va dirigido este libro

Este libro es para desarrolladores, ingenieros y arquitectos que saben suficiente JavaScript para ser peligrosos y se han mojado los pies en TypeScript. Entiendes los conceptos fundamentales de los tipos y cómo aplicarlos, y comprendes las ventajas inmediatas de los tipos estáticos. Estás en un punto en el que las cosas se ponen interesantes: necesitas un conocimiento más profundo del sistema de tipos, y necesitas trabajar activamente con TypeScript no sólo para asegurar una aplicación robusta y escalable, sino también para garantizar la colaboración entre tú y tus colegas.

Quieres aprender cómo se comporta algo en TypeScript, así como entender el razonamiento que hay detrás de su comportamiento. Esto es lo que obtienes en TypeScript Cookbook. Aprenderás la configuración del proyecto, las peculiaridades y el comportamiento del sistema de tipos; los tipos complejos y sus casos de uso; y a trabajar con frameworks y aplicar la metodología de desarrollo de tipos. Este libro está diseñado para llevarte de novato a aprendiz, y finalmente a experto. Si necesitas una guía para aprender activamente más sobre las sofisticadas características de TypeScript, pero también una referencia en la que puedas confiar a lo largo de tu carrera, este libro te vendrá como anillo al dedo.

¿Qué contiene este libro?

Un objetivo predominante al escribir TypeScript Cookbook fue centrarse en soluciones para problemas cotidianos. TypeScript es un lenguaje de programación extraordinario, y las características del sistema de tipos son tan potentes que llegamos a un punto en el que la gente se reta a sí misma con rompecabezas avanzados de TypeScript. Aunque estos rompecabezas son entretenidos, a menudo carecen de contexto en el mundo real y, por tanto, no forman parte de este libro.

Quiero asegurarme de que el contenido presentado es algo con lo que te encontrarás en tu día a día como desarrollador de TypeScript, con problemas que provienen de situaciones del mundo real y soluciones que son holísticas. Te enseñaré técnicas y metodologías que podrás utilizar en múltiples escenarios, no sólo en una única receta. A lo largo del libro encontrarás referencias a recetas anteriores, que te mostrarán cómo puede aplicarse una técnica concreta en un nuevo contexto.

Los ejemplos están arrancados directamente del código fuente de proyectos reales o reducidos a lo esencial para ilustrar un concepto sin requerir demasiados conocimientos del dominio. Aunque algunos ejemplos son muy específicos, también verás muchos objetos de Person que tienen el nombre de "Stefan" (y podrás ver mi edad a lo largo del libro).

El libro se centrará casi exclusivamente en las funciones que TypeScript añade sobre JavaScript; por lo tanto, para comprender el ejemplo en su totalidad, necesitas entender una cantidad razonable de JavaScript. No espero que seas un gurú de JavaScript, pero ser capaz de leer código JavaScript básico es imprescindible. Dado que JavaScript y TypeScript tienen esta fuerterelación, algunos capítulos del libro discuten las características de JavaScript y su comportamiento, pero siempre a través de la lente de TypeScript.

Un libro de cocina está diseñado para darte una solución rápida a un problema: una receta. En este libro, cada receta termina con una discusión, que te proporciona un contexto más amplio y el significado de la solución. Dependiendo del estilo del autor, loslibros de cocina de O'Reilly se centran en la solución o en la discusión. TypeScript Cookbook es inequívocamente un libro de debate. En mis casi 20 años de carrera como persona que escribe software, nunca me he encontrado con situaciones en las que una solución sirva para todos los problemas. Por eso quiero mostrarte en detalle cómo llegamos a nuestras conclusiones, su significado y las compensaciones. En última instancia, este libro debería ser una guía para discusiones de este tipo. ¿Por qué hacer conjeturas cuando tienes argumentos adecuados para tusdecisiones?

Organización de este libro

TypeScript Cookbook te lleva a través del lenguaje de principio a fin. Comenzamos con la configuración del proyecto, hablamos de tipos básicos y del funcionamiento interno del sistema de tipos, y finalmente nos adentramos en territorio avanzado como los tipos condicionales y los tipos ayudantes. Continuamos con capítulos que exploran características muy específicas, como la dualidad de clases y el soporte para React, y terminamos con aprendizajes sobre cómo enfocar mejor eldesarrollo de tipos.

Aunque hay un hilo conductor y una acumulación, cada capítulo y cada receta pueden consumirse por sí solos. Cada lección se ha diseñado para señalar la conexión con las recetas anteriores (¡o siguientes!) del libro, pero en última instancia cada capítulo es autónomo. Siéntete libre de consumirlo de principio a fin, o utiliza el enfoque de "elige tu propia aventura" con sus numerosas referencias. He aquí un breve resumen del contenido.

TypeScript quiere trabajar con todos los sabores de JavaScript, y hay muchos sabores diferentes. En el Capítulo 1, "Configuración del proyecto", conocerás las posibilidades de configuración para diferentes tiempos de ejecución del lenguaje, sistemas de módulos y plataformas de destino.

El Capítulo 2, "Tipos básicos", te guía a través de la jerarquía de tipos, te indica la diferencia entre any y unknown, te enseña qué código contribuye a qué espacio de nombres y responde a la vieja pregunta de si elegir un alias de tipo o una interfaz para describir tus tipos de objeto.

Uno de los capítulos más largos del libro es el Capítulo 3, "El sistema de tipos". Aquí aprenderás todo sobre los tipos unión e intersección, cómo definir tipos unión discriminados, cómo utilizar las técnicas assert never y optional never, y cómo reducir y ampliar los tipos en función de tu caso de uso. Después de este capítulo, entenderás por qué TypeScript tiene aserciones de tipos y no hace castings de tipos, por qué los enums están generalmente mal vistos, y cómo encontrar los bits nominales en un sistema de tipos estructural.

TypeScript tiene un sistema de tipos genéricos, que veremos en detalle en el Capítulo 4, "Genéricos". Los genéricos no sólo hacen que tu código sea más reutilizable, sino que también son la entrada a las características más avanzadas de TypeScript. Este capítulo marca el punto en el que asciendes desde los fundamentos de TypeScript a las áreas más sofisticadas del sistema de tipos, un final apropiado para la primera parte.

El capítulo 5, "Tipos condicionales", explica por qué el sistema de tipos TypeScript es también su propio lenguaje de metaprogramación. Con la posibilidad de elegir tipos basados en ciertas condiciones, la gente inventó las cosas más destacadas, como un analizador SQL completo o un diccionario en el sistema de tipos. Utilizamos los tipos condicionales como herramienta para hacer que un sistema de tipos estático sea más flexible para situaciones dinámicas.

En el Capítulo 6, "Tipos literales de plantillas de cadenas", verás cómo TypeScript integra un analizador sintáctico de cadenas en el sistema de tipos. Extraer nombres de cadenas de formato, definir un sistema de eventos dinámico basado en la entrada de cadenas y crear identificadores dinámicamente: ¡nada parece imposible!

Tendrás una pequeña muestra de programación funcional en el Capítulo 7, "Tipos de tupla variádicos". La tupla tiene un significado especial en TypeScript y ayuda a describir parámetros de función y matrices similares a objetos, y crea funciones auxiliares flexibles.

En el Capítulo 8, "Tipos ayudantes", hay aún más metaprogramación . TypeScript tiene unos cuantos tipos ayudantes incorporados que te facilitan la derivación de tipos a partir de otros tipos. En este capítulo, aprenderás no sólo a utilizarlos, sino también a crear los tuyos propios. Este capítulo también marca el siguiente punto de ruptura en el libro de cocina de TypeScript, porque en este punto has aprendido todos los ingredientes básicos del lenguaje y del sistema de tipos, que luego podrás aplicar en la siguiente parte.

Después de pasar ocho capítulos comprendiendo todos los entresijos del sistema de tipos, ha llegado el momento de integrar tus conocimientos con las definiciones de tipos realizadas por otros en el Capítulo 9, "La biblioteca estándary las definiciones de tipos externas". En este capítulo verás situaciones que funcionan de forma distinta a la esperada, y verás cómo puedes doblegar las definiciones de tipos incorporadas a tu voluntad.

En el Capítulo 10, "TypeScript y React", aprenderás cómo se integra en TypeScript uno de los frameworks de JavaScript más populares, las características que hacen posible la extensión sintáctica JSX, y cómo encaja esto en el concepto general de TypeScript. También aprenderás cómo escribir tipos robustos para componentes y ganchos, y cómo tratar con un archivo de definición de tipos que se ha adjuntado a la biblioteca real a posteriori.

El siguiente capítulo trata sobre las clases, un elemento básico de la programación orientada a objetos que estaba disponible en TypeScript mucho antes de que existiera su contrapartida en JavaScript. Esto conduce a una interesante dualidad de características que se tratan en detalle en el Capítulo 11, "Clases".

El libro termina con el Capítulo 12, "Estrategias de desarrollo de tipos". Aquí me centro en darte las habilidades necesarias para crear tipos avanzados por tu cuenta, tomar las decisiones correctas sobre cómo avanzar en tu proyecto y tratar con bibliotecas que validan tipos por ti. También aprenderás sobre soluciones especiales y funciones ocultas, y discutirás cómo nombrar a los genéricos o si los tipos avanzados son un poco demasiado. Este capítulo es especialmente divertido porque, tras un largo viaje de novato a aprendiz, alcanzarásel estatus de experto.

Todos los ejemplos están disponibles como playground TypeScript o proyecto CodeSandbox en el sitio web del libro. Los playgrounds, en particular, ofrecen un estado intermedio, para que puedas trastear por tu cuenta y jugar con los comportamientos. Siempre digo que no puedes aprender un lenguaje de programación sólo leyendo sobre él; necesitas codificar activamente y ensuciarte las manos para entender cómo funciona todo junto. Considera esto como una invitación a divertirte con los tipos de programación.

Convenciones utilizadas en este libro

Convenciones de programación

TypeScript permite muchos estilos de programación y opciones de formato. Para evitar que se te caiga la bicoca, he optado por autoformatear todos los ejemplos utilizando Prettier. Si estás acostumbrado a un estilo de formato diferente -quizá prefieres comas en lugar de punto y coma después de cada declaración de propiedad de tus tipos-, eres más que bienvenido a seguir con tu preferencia.

TypeScript Cookbook tiene muchos ejemplos y trata muchas funciones. Hay muchas formas de escribir funciones, y yo he optado por escribir principalmente declaraciones de funciones en lugar de expresiones de funciones, excepto cuando era crucial explicar las diferencias entre ambas notaciones. En todas las demás ocasiones, se trata más de una cuestión de gusto que de razones técnicas.

Todos los ejemplos se han comprobado con TypeScript 5.0, la versión más reciente en el momento de escribir este libro. TypeScript cambia constantemente y también lo hacen las reglas. Este libro se asegura de que nos centremos principalmente en las cosas que son duraderas y en las que se puede confiar a través de las versiones. En los casos en los que espero un mayor desarrollo o un cambio fundamental, proporciono las advertencias y notas correspondientes.

Convenciones tipográficas

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Utilizar ejemplos de código

El material complementario (ejemplos de código, ejercicios, etc.) se puede descargar en https://typescript-cookbook.com.

Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requierepermiso.

Agradecemos, pero no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "TypeScript Cookbook por Stefan Baumgartner (O'Reilly). Copyright 2023 Stefan Baumgartner, 978-1-098-13665-9".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita https://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/typescript-cookbook.

Para obtener noticias e información sobre nuestros libros y cursos, visita https://oreilly.com.

Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media.

Síguenos en Twitter: https://twitter.com/oreillymedia.

Míranos en YouTube: https://youtube.com/oreillymedia.

Agradecimientos

Alexander Rosemann, Sebastian Gierlinger, Dominik Angerer y Georg Kothmeier son las primeras personas a las que acudo si tengo algo nuevo que cocinar. Nuestras reuniones e interacciones regulares no sólo son entretenidas, sino que también me proporcionan la información necesaria para evaluar todas mis elecciones. Son las primeras personas que oyeron hablar del libro, y también las primeras que dieron su opinión.

Interactuar con Matt Pocock, Joe Previte, Dan Vanderkam, Nathan Shively-Sanders y Josh Goldberg en las redes sociales me aportó muchas ideas nuevas. Su enfoque de TypeScript puede diferir del mío, pero en última instancia ampliaron mi horizonte y se aseguraron de que no acabara siendo demasiado obstinado.

Phil Nash, Simona Cotin y Vanessa Böhner no sólo han sido los primeros revisores del manuscrito final, sino también compañeros y amigos desde hace mucho tiempo que siempre están aquí para revisar mis ideas. Addy Osmani ha sido una inspiración a lo largo de toda mi carrera, y estoy muy orgullosa de que haya aceptado abrir mi nuevo libro.

Lena Matscheko, Alexandra Rapeanu y Mike Kuss no dudaron en bombardearme con retos técnicos y preguntas basadas en sus experiencias del mundo real. Allí donde me faltaba un buen ejemplo, me inundaron de excelente material para destilar.

Perdería la pista de todos los desarrollos de TypeScript si no fuera por Peter Kröner, que constantemente llama a mi puerta cuando sale una nueva versión de TypeScript. Nuestros episodios de podcast juntos sobre lanzamientos de TypeScript son legendarios, y también cada vez menos sobre TypeScript.

Mis editores técnicos Mark Halpin, Fabian Friedl y Bernhard Mayr me proporcionaron los mejores comentarios técnicos que podía desear. Pusieron en tela de juicio cada suposición, comprobaron cada muestra de código y se aseguraron de que todos mis razonamientos tuvieran sentido y de que no me saltara ningún detalle. Su amor por el detalle y su capacidad para debatir a un nivel tan alto han garantizado que este libro no sea una mera colección de ideas ingeniosas, sino una guía y una referencia con una base sólida.

Este libro no existiría si no fuera por Amanda Quinn. Después de escribir TypeScript en 50 Lecciones en 2020, pensé que había dicho todo lo que necesitaba decir sobre TypeScript. Fue Amanda quien me persuadió para que probara la idea de un libro de cocina, para ver qué ideas encontraría que no pasaran el corte para mi primer libro. Al cabo de tres horas tenía una propuesta completa y un índice con más de cien entradas. Amanda tenía razón: tenía mucho más que decir, y le estoy eternamente agradecida por suapoyo y su orientación.

Mientras que Amanda ayudó en las primeras fases, Shira Evans se aseguró de que el proyecto progresara adecuadamente y no descarrilara. Sus comentarios fueron inestimables, y su enfoque pragmático y práctico hizo que fuera un placer trabajar juntas.

Elizabeth Faerm y Theresa Jones se encargaron de la producción. Su ojo para los detalles es extraordinario, y se aseguraron de que la fase de producción fuera emocionante y, de hecho, ¡muy divertida! El resultado final es una hermosa experiencia de la que nunca me canso.

Durante la escritura conté con la gran ayuda de Porcupine Tree, Beck, Nobuo Uematsu, Camel, The Beta Band y muchos otros.

La mayor contribución a este libro proviene de mi familia. Doris, Clemens y Aaron son todo lo que siempre he deseado, y sin su amor y apoyo infinitos, no podría perseguir mis ambiciones. Gracias por todo.

Get Libro de cocina de TypeScript now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.