Ir al contenido
learn

TypeScript avanzado — Misión

Después del curso TypeScript para desarrolladores C#/Java, sé leer y escribir TypeScript estricto. Lo que todavía no sé hacer es leer los tipos de los que están hechas las bibliotecas: un esquema Zod cuyo tipo se calcula a partir de su definición, un router que conoce los parámetros de una ruta a partir de la cadena de la ruta, un emisor de eventos que comprueba el nombre de un evento y la forma de su carga útil. Esos tipos son programas, ejecutados por el verificador, y tienen su propio flujo de control, su propia recursión y sus propios límites.

La otra mitad es lo que ocurre alrededor del verificador: qué promete un tipo cuando los datos llegan por un socket, cómo se compila un proyecto grande, qué dicen los archivos de declaración de un paquete, y qué cambió cuando el compilador se reescribió en Go. Este curso desmonta cada una de esas cosas, sobre código real: el frontend de Guitar Alchemist (GA) y el hub SignalR con el que habla.

Escribes TypeScript con strict activado, y te manejas bien con las uniones, el narrowing, los genéricos, keyof y un primer tipo mapeado, que son las lecciones 2 a 4 del curso base. Conoces bien C# o Java, ya que las comparaciones son con ellos. No hace falta que hayas escrito un tipo condicional ni un archivo de declaración.

El curso base presenta cada herramienta donde un desarrollador C# o Java la necesita por primera vez. Este curso da por hecho que las usas, y mira cómo las evalúa el verificador, dónde dejan de funcionar y cómo se construyen las bibliotecas sobre ellas. Los componentes, JSX y el DOM corresponden al curso React (Vite).

C# Java TypeScript
Calcular un tipo a partir de otro generadores de código fuente, T4 procesadores de anotaciones tipos condicionales, mapeados y de plantilla literal, ejecutados por el verificador
Una cadena que lleva un tipo no: un objeto clave tipado no: un token Class<T> un tipo literal: 'NodeChanged' es un tipo
Varianza declarada in/out en interfaces y delegados, comprobada ? extends, ? super en el lugar de uso medida a partir de la estructura; in/out opcionales, comprobadas en parte
Un envoltorio nominal readonly record struct, sin asignación de memoria un record, un objeto una marca (brand), borrada: coste cero, cero comprobación en tiempo de ejecución
Verificar datos de fuera los tipos existen en tiempo de ejecución: System.Text.Json puede comprobarlos Jackson, Bean Validation una biblioteca de esquemas, cuyo tipo se deriva del esquema
Fallos esperados excepciones, o un tipo resultado excepciones comprobadas una unión resultado, y excepciones para los bugs

Las lecciones usan GuitarAlchemist/ga en el commit 32f143c: la biblioteca de componentes ReactComponents/ga-react-components, en particular su vista de gobernanza Prime Radiant, y el hub C# que la alimenta, Apps/ga-server/GaApi/Hubs/GovernanceHub.cs. Las lecciones reducen las líneas que citan a archivos que se ejecutan por sí solos, e indican de dónde viene cada una. El código fuente del propio verificador se cita de microsoft/typescript-go en la etiqueta typescript/v7.0.2 (commit 2bd066d). Lo que las lecciones encontraron en GA está en el diario.

  • escribir y probar tipos que calculan otros tipos: tipos condicionales, infer, tipos mapeados con reasignación de claves, tipos de plantilla literal, tipos recursivos, y conocer los límites en los que el verificador se rinde;
  • predecir la varianza que mide tsc, detectar dónde no es segura, y controlar la inferencia con satisfies, los parámetros de tipo const y NoInfer;
  • modelar un dominio de modo que los errores sean errores de compilación: marcas, tipos opacos, uniones sin estados imposibles, máquinas de estados tipadas;
  • verificar los datos en la frontera del programa con una biblioteca de esquemas, y devolver errores tipados en lugar de lanzarlos;
  • escribir y publicar archivos de declaración, configurar la resolución de módulos para Node.js y los bundlers, y publicar un paquete para ESM y CommonJS;
  • compilar un proyecto grande con referencias de proyecto, medir dónde pasa el tiempo el verificador, y llevar un proyecto a TypeScript 7;
  • usar los decoradores estándar, la API del compilador y reglas de lint tipadas, y probar los tipos en la CI;
  • leer cómo están construidas las bibliotecas tipadas: builders, APIs fluidas, rutas tipadas y constructores de consultas.
# Lección Ya conoces
1 Programación a nivel de tipos genéricos, resolución de sobrecargas, generadores de código fuente
2 Varianza y asignabilidad IEnumerable<out T>, comodines, inferencia de tipos
3 Modelar con tipos records, objetos de valor, jerarquías selladas, el patrón estado
4 Fronteras en tiempo de ejecución: esquemas y errores tipados System.Text.Json, Jackson, Bean Validation, excepciones
5 Archivos de declaración: .d.ts, declare module, aumentación de módulos y global, tipar una biblioteca JavaScript, DefinitelyTyped ensamblados de referencia, archivos de documentación XML
6 Módulos y resolución: moduleResolution nodenext y bundler, exports e imports, paquetes duales ESM/CommonJS, isolatedDeclarations, verbatimModuleSyntax la carga de ensamblados, el module path de Java
7 A escala: referencias de proyecto, tsc -b, workspaces de npm y pnpm, --generateTrace, el rendimiento del verificador soluciones, builds incrementales, builds Maven multimódulo
8 Decoradores: el estándar ECMAScript, los metadatos, y lo que cambió desde experimentalDecorators atributos, anotaciones
9 La API del compilador y las herramientas: transformaciones, el servicio de lenguaje, una regla typescript-eslint tipada analizadores Roslyn, procesadores de anotaciones
10 El compilador nativo: TypeScript 7, qué cambió, compatibilidad, mediciones el paso de los compiladores de .NET Framework a Roslyn
11 Pruebas de tipos: expect-type, tsd, vitest --typecheck pruebas de una API pública, pruebas de analizadores
12 Patrones de biblioteca: builders tipados, APIs fluidas, inferencia de rutas, constructores de consultas tipados LINQ, Entity Framework, jOOQ
— Diario

Las lecciones 5 a 12 están planificadas y todavía no se han escrito.

  • Node.js 24 y Git. En Windows, ejecuta el script del curso desde Git Bash: npm ci, y luego bash check.sh en code/typescript-advanced.
  • El SDK de .NET 10 y un JDK 25, solo para las comparaciones; check.sh se las salta cuando falta dotnet o java.