TypeScript para desarrolladores C#/Java — Misión
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
Por qué aprendo esto
Sección titulada «Por qué aprendo esto»Los frontends de Guitar Alchemist están escritos en TypeScript, igual que los archivos de configuración de este sitio. Leo ese código como desarrollador C#, y parece C# con los tipos en el lugar equivocado, hasta que deja de parecerlo: se acepta un objeto donde se esperaba una clase, un cast no convierte nada, un genérico no tiene T en tiempo de ejecución, y un programa con errores de tipo se ejecuta igualmente.
El curso de JavaScript trató lo que ocurre en tiempo de ejecución. Este trata lo que tsc verifica, lo que no puede verificar, y dónde se encuentran ambos.
Para quién es este curso
Sección titulada «Para quién es este curso»Te manejas bien con C# o Java, incluidos los genéricos, las interfaces y los tipos de referencia anulables u Optional, y has seguido el curso JavaScript para desarrolladores C#/Java, o conoces su contenido: módulos y npm, valores y conversiones, funciones y this, prototipos y clases. Las lecciones enlazan a sus páginas en lugar de volver a explicar JavaScript.
Los componentes, JSX y el DOM corresponden al curso React (Vite) que sigue a este. Este curso ejecuta TypeScript en Node.js, donde cada ejemplo puede verificarse y ejecutarse en CI, y solo mira código React como datos del repositorio de GA.
El curso TypeScript avanzado va más allá para desarrolladores que ya escriben TypeScript estricto: cómo el verificador evalúa los tipos calculados a partir de otros tipos, la varianza, el modelado con brands y máquinas de estados, y los esquemas en la frontera de un programa.
TypeScript en una tabla
Sección titulada «TypeScript en una tabla»| C# | Java | TypeScript | |
|---|---|---|---|
| Compilador | csc, a través de dotnet build |
javac |
tsc, que verifica y puede escribir JavaScript |
| Archivo de proyecto | .csproj |
pom.xml, build.gradle |
tsconfig.json, junto a package.json |
| Tipos en tiempo de ejecución | reificados: typeof(T), is T |
genéricos borrados, casts comprobados | ninguno: todos los tipos se borran, casts incluidos |
| Compatibilidad | nominal: herencia declarada | nominal | estructural: la misma forma es el mismo tipo |
| Un error de tipo | detiene la build | detiene la build | no detiene nada salvo que la build se lo pida a tsc |
| Valor ausente | string? con advertencias |
Optional<T>, anotaciones |
string | undefined, errores con strictNullChecks |
| Uno de varios casos | jerarquía de clases, switch con patrones |
sealed interface, switch con patrones |
tipos unión y narrowing |
| Genéricos | reificados, varianza en las interfaces | borrados, comodines | borrados, varianza estructural, tipos calculados a partir de tipos |
Los datos
Sección titulada «Los datos»Las lecciones usan código real como material. GuitarAlchemist/ga se cita en el commit a826864, en sus dos frontends React, ReactComponents/ga-react-components y Apps/ga-client, que instalé y verifiqué con tsc 5.9.3 y 7.0.2. Este sitio, construido con Astro, es el otro proyecto TypeScript, en el commit 8ba378e. Las lecciones reducen las líneas que citan a archivos que se ejecutan por sí solos, e indican de dónde viene cada una. Lo que tsc encontró en esos proyectos está en el diario.
Al final de este curso, sabré
Sección titulada «Al final de este curso, sabré»- configurar un proyecto TypeScript para Node.js, leer su
tsconfig.jsony hacer que los errores de tipo hagan fallar la build; - leer un diagnóstico de
tscy relacionar su código con lo que habría dicho C# o Java; - predecir cuándo dos tipos son compatibles, y dar un nombre a un tipo cuando la estructura no basta;
- modelar datos como uniones, estrecharlas y obtener un error de compilación cuando falta un caso;
- verificar en la frontera los datos que vienen de fuera del programa, en lugar de afirmar su tipo;
- escribir funciones y tipos genéricos, y explicar por qué
new T()einstanceof Tno existen; - calcular tipos a partir de otros tipos con
keyof, tipos mapeados y tipos condicionales; - tipar una biblioteca JavaScript, un paquete Node.js y un frontend construido con Vite, y migrar un proyecto JavaScript a
strict.
| # | Lección | Ya conoces |
|---|---|---|
| 1 | El compilador y las herramientas | csc, javac, .csproj, advertencias y errores del compilador |
| 2 | Tipado estructural | interfaces, var, readonly/final, object, dynamic, tipos de referencia anulables |
| 3 | Uniones y narrowing | jerarquías de clases, switch con patrones, interfaces selladas, casts |
| 4 | Genéricos | List<T>, restricciones, IEnumerable<out T>, comodines, borrado de tipos |
| 5 | Programación a nivel de tipos: tipos condicionales, infer, tipos de plantilla literal y satisfies (próximamente) |
resolución de sobrecargas, typeof, atributos |
| 6 | Clases en TypeScript: modificadores, abstract, implements, decoradores |
clases, modificadores de acceso, atributos y anotaciones |
| 7 | Módulos y archivos de declaración: .d.ts, @types, declare module, tipar JavaScript con JSDoc |
ensamblados de referencia, extern, metadatos de los JAR |
| 8 | Código asíncrono y errores: Promise<T>, errores tipados, tipos resultado |
Task<T>, excepciones, CompletableFuture, excepciones comprobadas |
| 9 | Datos en la frontera: fetch, JSON, validación de esquemas y tipos generados a partir de OpenAPI |
System.Text.Json, Jackson, NSwag, OpenAPI Generator |
| 10 | Probar el código y los tipos: Vitest, @ts-expect-error, pruebas de tipos |
xUnit, JUnit, analizadores |
| 11 | Proyectos a escala: referencias de proyecto, tsc -b, monorepos, typescript-eslint |
soluciones, builds Maven multimódulo, analizadores |
| 12 | Migrar a strict: los frontends de GuitarAlchemist/ga, y de TypeScript 6 a 7 |
activar los tipos de referencia anulables en un proyecto existente |
| — | Diario |
Recursos
Sección titulada «Recursos»- The TypeScript Handbook y la referencia de TSConfig
- Notas de versión de TypeScript, y el anuncio de TypeScript 7
- microsoft/TypeScript, cuyo
diagnosticMessages.jsonenumera todos los códigos de error, y microsoft/typescript-go, el port a Go - Node.js 24 — Módulos: TypeScript
- ECMAScript® Language Specification, el lenguaje al que TypeScript añade tipos