Prefacio a la Primera Edición (2019)

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

En la primavera de 2016, visité a mi antiguo compañero de trabajo Evan Martin en la oficina de Google en San Francisco y le pregunté qué le entusiasmaba. Le había hecho esta misma pregunta muchas veces a lo largo de los años porque las respuestas eran muy variadas e impredecibles, pero siempre interesantes: Herramientas de creación de C++, controladores de audio de Linux, crucigramas en línea, scripts de emacs. Esta vez, Evan estaba entusiasmado con TypeScript y Visual Studio Code.

¡Me sorprendió! Ya había oído hablar de TypeScript, pero sólo sabía que había sido creado por Microsoft y creía erróneamente que tenía algo que ver con .NET. Como usuario de Linux de toda la vida, no podía creer que Evan se hubiera subido al equipo de Microsoft.

Entonces Evan me enseñó VS Code y la zona de juegos de TypeScript y me convertí al instante. Todo era muy rápido, y la inteligencia del código facilitaba la construcción de un modelo mental del sistema de tipos. Después de años escribiendo anotaciones de tipo en comentarios JSDoc para el compilador Closure, esto parecía un JavaScript tipado que funcionaba de verdad. ¿Y Microsoft había creado un editor de texto multiplataforma sobre Chromium? Quizá fuera un lenguaje y una cadena de herramientas que mereciera la pena aprender.

Hacía poco que me había unido a Sidewalk Labs y estaba escribiendo nuestro primer JavaScript. El código base era aún lo suficientemente pequeño como para que Evan y yo pudiéramos convertirlo todo a TypeScript en los días siguientes.

Desde entonces estoy enganchado. TypeScript es más que un sistema de tipos. También aporta todo un conjunto de servicios de lenguaje que son rápidos y fáciles de usar. El efecto acumulativo es que TypeScript no sólo hace que el desarrollo de JavaScript sea más seguro: ¡también lo hace más divertido!

Brooklyn, NY
Octubre de 2019

Agradecimientos a la Primera Edición

Hay muchas personas que han ayudado a hacer posible este libro. Gracias a Evan Martin por presentarme TypeScript y mostrarme cómo pensar en ello. A Douwe Osinga por ponerme en contacto con O'Reilly y apoyarme en el proyecto. A Brett Slatkin por sus consejos sobre la estructura y por mostrarme que alguien a quien conocía podía escribir un libro eficaz. A Scott Meyers por idear este formato y por su entrada en el blog "Libros Eficaces ", que me proporcionó una orientación esencial.

A mis revisores, Rick Battagline, Ryan Cavanaugh, Boris Cherny, Yakov Fain, Jesse Hallett y Jason Killian. A todos mis compañeros de trabajo en Sidewalk que aprendieron TypeScript conmigo a lo largo de los años. A todos los de O'Reilly que ayudaron a hacer realidad este libro: Angela Rufino, Jennifer Pollock, Deborah Baker, Nick Adams y Jasmine Kwityn. Al equipo de TypeScript NYC, Jason, Orta y Kirill, y a todos los ponentes. Muchos artículos se inspiraron en charlas del Meetup, como se describe en la siguiente lista:

  • El punto 3 se inspiró en una entrada del blog de Evan Martin que me pareció especialmente esclarecedora cuando estaba aprendiendo TypeScript por primera vez.

  • El punto 7 se inspiró en la charla de Anders sobre tipado estructural y relaciones keyof en la TSConf 2018, y en una charla de Jesse Hallett en el TypeScript NYC Meetup de abril de 2019.

  • Tanto la guía de Basarat como las útiles respuestas de DeeV y GPicazo en Stack Overflow fueron esenciales para escribir el punto 9.

  • El punto 10 se basa en un consejo similar del punto 4 de Eficaz JavaScript.

  • Me inspiré para escribir el punto 11 por la confusión masiva en torno a este tema en el TypeScript NYC Meetup de agosto de 2019.

  • El punto 13 recibió una gran ayuda de varias preguntas sobre type frente a interface en Stack Overflow. Jesse Hallett sugirió la formulación en torno a la extensibilidad.

  • Jacob Baskin proporcionó ánimos y los primeros comentarios sobre el punto 15.

  • El punto 18 se inspiró en varias muestras de código enviadas alsubreddit r/typescript.

  • El punto 24 se basa en mis propios escritos en Medium y en una charla que di en el TypeScript NYC Meetup de octubre de 2018.

  • El punto 29 se basa en un consejo habitual en Haskell ("haz que los estados ilegales sean irrepresentables"). La historia del Air France 447 está inspirada en el increíble artículo de 2011 de Jeff Wise en Popular Mechanics.

  • El punto 30 se basa en un problema que me encontré con las declaraciones de tipo de Mapbox. Jason Killian sugirió la redacción del título.

  • El consejo sobre la nomenclatura del punto 41 es habitual, pero esta formulación concreta se inspiró en el breve artículo de Dan North en 97 Things Every Programmer Should Know (Kevlin, Henney, O'Reilly).

  • El punto 64 se inspiró en la charla de Jason Killian en el primer TypeScript NYC Meetup de septiembre de 2017.

  • El punto 25 se basa en las notas de la versión TypeScript 2.1. El término "evolving any" no se utiliza mucho fuera del propio compilador de TypeScript, pero me parece útil tener un nombre para este patrón inusual.

  • El punto 46 se inspiró en una entrada del blog de Jesse Hallett.

  • El punto 47 ha sido muy útil gracias a los comentarios de Titian Cernicova-Dragomir en el número 33128 de TypeScript.

  • El punto 49 se basa en el trabajo de York Yao sobre la herramienta type-coverage. Quería algo así, ¡y existía!

  • El punto 66 se basa en una charla que di en el TypeScript NYC Meetup de diciembre de 2017.

  • El artículo 52 tiene una deuda de gratitud con la entrada de David Sheldrick en el blog Artsy sobre los tipos condicionales, que me desmitificó enormemente el tema.

  • El punto 70 se inspiró en una charla que Steve Faulkner, alias southpolesteve, dio en el Meetup de febrero de 2019.

  • El punto 55 se basa en mis propios escritos en Medium y en mi trabajo sobre la herramienta de comprobación de tipografías, que finalmente se integró en dtslint.

  • El punto 72 fue inspirado/reforzado por el post de Kat Busch en Medium sobre los distintos tipos de enums en TypeScript, así como por los escritos de Boris Cherny sobre este tema en Programming TypeScript (O'Reilly).

  • El punto 60 fue inspirado por mi propia confusión y la de mis compañeros de trabajo sobre este tema. La explicación definitiva la da Anders en TypeScript PR #12253.

  • La documentación MDN fue esencial para redactar el Tema 75.

  • El capítulo 10 se basa en mi propia experiencia migrando la vetusta biblioteca dygraphs.

Encontré muchas de las entradas de blog y charlas que condujeron a este libro a través del excelente subreddit r/typescript. Estoy especialmente agradecido a los desarrolladores que proporcionaron allí ejemplos de código que fueron esenciales para comprender problemas comunes en TypeScript para principiantes. Gracias a Marius Schulz por el boletín TypeScript Weekly. Aunque sólo es ocasionalmente semanal, siempre es una excelente fuente de material y una gran manera de mantenerse al día con TypeScript. A Anders, Daniel, Ryan y a todo el equipo de TypeScript en Microsoft por las charlas y todos los comentarios sobre los problemas. La mayoría de mis problemas eran malentendidos, ¡pero no hay nada tan satisfactorio como registrar un error y ver inmediatamente cómo el propio Anders Hejlsberg lo soluciona!

Por último, gracias a Alex por apoyarme tanto durante este proyecto y por ser tan comprensivo con todas las vacaciones, mañanas, noches y fines de semana de trabajo que necesité paracompletarlo.

Get TypeScript Eficaz, 2ª Edición 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.