Diario
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.
Progreso
Sección titulada «Progreso»- TypeScript 7.0.2 fijado en el
package.jsony el archivo de bloqueo propios del curso, con@types/node24.13.4 y tsx 4.23.13 - CI:
tscsobre el proyecto y sobre cada fragmento de error, cada ejemplo y cada solución ejecutados con Node.js 24.21.0, las comparaciones en C# y Java compiladas y ejecutadas, todo comparado con su salida esperada en tres SO - Lección 1: el compilador y las herramientas
- Lección 2: tipado estructural
- Lección 3: uniones y narrowing
- Lección 4: genéricos
- Lección 5: programación a nivel de tipos
El compilador de TypeScript en 7.0.2 — el port a Go — con Node.js 24 y npm 11. La mitad de estas filas son cambios deliberados que rompen una costumbre más que defectos, y la columna Estado dice cuáles. La cuarta fila es el único sitio donde el autor esperaba un error, no lo obtuvo, y resultó que el compilador tenía razón.
No hay tabla de experimentos: esa cuarta fila es la única predicción del diario escrita antes de su prueba, y una tabla de una sola fila se leería como una sección que no se supo llenar.
| Esperado | Lo que pasa | Dónde | Medición | Estado |
|---|---|---|---|---|
tsc --noEmit con errores devuelve el mismo código de salida de siempre |
El código cambió entre la 6.0 y la 7.0 | tsc 6.0.3 frente a 7.0.2 | La 6.0.3 devuelve 2, la 7.0.2 devuelve 1. En la 7.0.2, 1 significa que los errores impidieron la salida y 2 que se escribió pese a ellos | Por diseño, un cambio con ruptura. Un paso de CI que comprueba el 2 se rompe al actualizar; comprobar que no sea cero 2026-09-15 |
tsc file.ts junto a un tsconfig.json ignora la configuración en silencio |
Desde la 6.0 es un error | tsc 6.0 y posteriores | TS5112. --ignoreConfig restablece el comportamiento antiguo; el curso construye en su lugar un tsconfig pequeño por fragmento erróneo |
Por diseño 2026-09-15 |
| Los miembros de una unión se imprimen en el orden en que se declararon | No, y el orden cambió entre versiones | tsc 5.9.3 frente a 7.0.2 | Sobre el ForceRadiant.tsx de GA: `“warning” |
“error” |
Una anotación de varianza out equivocada se rechaza |
interface Mislabeled<out T> { accept(value: T): void } compila |
tsc 7.0.2 | Los parámetros de método son bivariantes, así que T en esa posición satisface ambas anotaciones. C# señala la misma interfaz con CS1961. El fragmento se sustituyó por in T en un método que devuelve T, que tsc sí atrapa con TS2636 |
Por diseño. El autor esperaba un error y el compilador tenía razón — lo que cambió fue la lección, no él 2026-09-15 |
Array.isArray estrecha un unknown sin peligro |
Lo estrecha a any[]: un acceso a propiedad compila sin comprobación alguna |
tsc 7.0.2, la declaración de Array.isArray en la lib |
En la solución del ejercicio 2 de la lección 2, item.name compilaba sin comprobación, y tsc nunca pidió los typeof que hacen el código correcto |
Por diseño, y conviene saberlo 2026-09-15 |
| Una API estable es silenciosa | module.stripTypeScriptTypes sigue imprimiendo un ExperimentalWarning, aunque el borrado de tipos en sí es estable y mudo |
Node.js 24.21.0 | El aviso, en cada llamada | Reproducido, no reportado — el mejor candidato aguas arriba de este diario 2026-09-15 |
| El error de Node señala la línea tal como está escrita | La línea de fuente del mensaje lleva espacios donde estaban los tipos | borrado de tipos de Node.js 24.21.0 | const guitarSource = instrumentSource; — así es como el borrado preserva los números de línea y columna |
Por diseño 2026-09-15 |
dotnet run file.cs imprime los avisos del compilador en cada ejecución |
Construye de forma incremental: una segunda ejecución con la fuente sin cambios los imprime una vez y nunca más | programas de archivo único de .NET 10 | La primera pasada de CI falló en los tres sistemas con dos archivos: CS8602 y CS8509 estaban en la salida de la CI y no en la del autor. Corregido con dotnet clean y luego dotnet run --no-cache |
Reproducido en CI y en local, no reportado 2026-09-14 |
| Un compilador más nuevo señala los mismos errores | TypeScript 7 encuentra más, y mucho más rápido | tsc 5.9.3 frente a 7.0.2 sobre ga-react-components |
180 errores en 14,7 s con la 5.9.3; 197 en 1,9 s con la 7.0.2. Códigos nuevos: TS2591, porque types vale ahora [] por defecto; TS2871 «this expression is always nullish»; TS2550 para .at() con lib en ES2020 |
Reproducido. El diario deja constancia de su propia reserva: las versiones de las dependencias vienen de una instalación no congelada 2026-09-15 |
| npm ejecuta los scripts de instalación | npm 11.19 ya no los ejecuta por defecto | npm 11.19 con tsx 4.23.13 | npm warn install-scripts esbuild@0.28.2 (postinstall: node install.js). tsx funciona igual en los tres sistemas, porque el binario de esbuild llega como paquete de plataforma opcional |
Por diseño, valor por defecto cambiado 2026-09-14 |
| TypeScript 7.0 ofrece una API programática | Todavía no tiene ninguna; las herramientas que cargan el compilador como biblioteca usan @typescript/typescript6, un paquete de compatibilidad que da la 6.0 con un comando tsc6 |
TypeScript 7.0 | Leído en la documentación, no ejercitado — el curso no lo necesitó | Por diseño, una carencia conocida del port a Go 2026-09-14 |
| Un archivo de bloqueo escrito en Windows hay que rehacerlo en Linux | Lista los veinte paquetes de plataforma como dependencias opcionales: un solo archivo sirve para los tres sistemas | typescript 7.0.2, el port a Go | @typescript/typescript-win32-x64 en local; el paso de CI lista typescript-linux-x64 y typescript-darwin-arm64 |
Por diseño, y es lo que abarata la CI a tres sistemas 2026-09-14 |
2026-09-14 — Instalación de TypeScript 7.0.2
Sección titulada «2026-09-14 — Instalación de TypeScript 7.0.2»npm view typescript versionda la 7.0.2, el port a Go, publicada el 2026-07-08. El paquetetypescriptahora es pequeño: npm instala el compilador como un paquete por plataforma,@typescript/typescript-win32-x64en mi máquina, y el paso de información de la CI listatypescript-linux-x64en Linux ytypescript-darwin-arm64en macOS. El archivo de bloqueo lista los veinte paquetes de plataforma como dependencias opcionales, así quenpm cifunciona en los tres SO con el único archivo de bloqueo escrito en Windows.- TypeScript 7.0 todavía no tiene API programática. Las herramientas que cargan el compilador como biblioteca pueden usar
@typescript/typescript6, un paquete de compatibilidad que proporciona TypeScript 6.0 con un comandotsc6; no lo necesité para el curso. - El curso fija sus versiones en
code/typescript-for-csharp-java/package.json, no en el del sitio: el propio sitio no tiene ninguna dependenciatypescript. - npm 11.19 ya no ejecuta los scripts de instalación por defecto. Instalar tsx imprimió
npm warn install-scripts esbuild@0.28.2 (postinstall: node install.js), y tsx funciona de todos modos, en los tres SO: el binario de esbuild viene de un paquete de plataforma instalado como dependencia opcional.
2026-09-14 — La CI
Sección titulada «2026-09-14 — La CI»typescript-examples.ymlinstala Node.js 24.21.0, .NET 10 y Java 25, ejecutanpm cien la carpeta del curso, y luegocheck.shconREQUIRE_COMPARE=1, para que la falta dedotnetojavahaga fallar la ejecución en lugar de saltarse las comparaciones.check.shejecutatscuna vez sobre todo el proyecto, que debe pasar, y una vez por fragmento de error, con untsconfiggenerado que extiende el del curso y lista ese único archivo; un fragmento puede pedir opciones adicionales con un comentario// tsc options:, como hacenoUncheckedIndexedAccessen la lección 2.normalize.mjs, adaptado del curso de JavaScript, hace relativas las rutas y quita los marcos de la pila y los identificadores de proceso.- La primera ejecución falló en los tres SO, solo en dos archivos, y por el mismo motivo: las advertencias de C#
CS8602yCS8509estaban en la salida de la CI y no en la mía.dotnet run file.cscompila un programa basado en archivo de forma incremental, y una segunda ejecución con el fuente sin cambios no llama al compilador, así que sus advertencias solo se imprimen una vez.check.shahora ejecutadotnet cleansobre el archivo antes dedotnet run --no-cache, y las salidas capturadas en Windows coinciden en Linux y macOS. La siguiente ejecución pasó en los tres SO en 2 minutos y 41 segundos, siendo Windows el job más lento.
2026-09-15 — Sorpresas al escribir las lecciones 1-4
Sección titulada «2026-09-15 — Sorpresas al escribir las lecciones 1-4»El código de salida de tsc cambió entre la 6.0 y la 7.0. Con --noEmit y errores, tsc 6.0.3 devuelve 2, y la 7.0.2 devuelve 1. En la 7.0.2, 1 significa que los errores impidieron la salida, con noEmit o noEmitOnError, y 2 que la salida se escribió a pesar de los errores, lo que la lección 1 muestra con l01-emit. Un paso de CI que compruebe $? -eq 2 se rompería con la actualización; comprueba que el código no sea cero.
tsc file.ts junto a un tsconfig.json es un error desde la 6.0. TS5112 se niega a ignorar la configuración en silencio, como hacían las versiones anteriores; --ignoreConfig restaura el comportamiento anterior. check.sh construye en su lugar un pequeño tsconfig para cada fragmento de error.
Los miembros de una unión no se imprimen en el orden de declaración. La misma comparación en ForceRadiant.tsx de GA imprime "warning" | "error" | "unknown" | "contradictory" con la 5.9.3 y "contradictory" | "error" | "unknown" | "warning" con la 7.0.2. Las notas de la versión 6.0 lo explican: TypeScript 7 ordena los tipos por contenido para que los verificadores en paralelo coincidan. Las salidas esperadas de la lección 3 son solo las de la 7.0.2.
Una anotación out errónea compila. Escribí interface Mislabeled<out T> { accept(value: T): void } para el fragmento de error de la lección 4, esperando un error, y tsc 7.0.2 lo aceptó: accept es un método, los parámetros de los métodos son bivariantes, y T en esa posición satisface las dos anotaciones. C# señala la misma interfaz con CS1961. El fragmento usa ahora el error que tsc sí detecta, in T en un método que devuelve T (TS2636).
Array.isArray trae de vuelta any. En la solución del segundo ejercicio de la lección 2, el valor era unknown, y Array.isArray(value) lo estrechó a any[]: item.name compilaba sin comprobación. Las comprobaciones typeof de la solución la hacen correcta; tsc no las pidió. La lección 2 lo señala.
Node.js imprime la línea sin tipos. Cuando un archivo .ts falla en tiempo de ejecución, la línea del fuente en el mensaje de Node.js tiene espacios donde estaban los tipos, como en el const guitarSource = instrumentSource; de la lección 4. Así es como la eliminación de tipos conserva los números de línea y de columna.
module.stripTypeScriptTypes todavía imprime un ExperimentalWarning en la 24.21.0, aunque la eliminación de tipos en sí es estable y silenciosa; la lección 1 muestra la advertencia.
2026-09-15 — Lo que encontró tsc en GuitarAlchemist/ga (a826864)
Sección titulada «2026-09-15 — Lo que encontró tsc en GuitarAlchemist/ga (a826864)»Cloné GuitarAlchemist/ga en a826864 en una carpeta de pruebas, instalé los dos frontends, y ejecuté tsc con la 5.9.3, la versión que resuelve el pnpm-lock.yaml de la biblioteca de componentes, y con la 7.0.2.
- Nombres usados y nunca definidos.
Apps/ga-client/src/components/Chat/ChatInterface.tsxusaVIRTUALIZATION_THRESHOLD(líneas 69 y 219) yVirtualizedMessageList(líneas 254 y 255), y nada los define ni los importa:TS2304. La ruta/ai-copilotdeApp.tsxcarga ese componente, así que la página debería lanzar unReferenceErroral renderizarse (por verificar en un navegador). Reproducción:cd Apps/ga-client && npm ci && npx tsc -b --pretty false | grep ChatInterface. Parece un bug que merece una issue. - Los errores de tipo no hacen fallar el build. Los dos frontends se construyen con
vite build, que elimina los tipos sin verificarlos;ga-clientda 346 errores contsc -b(165 de ellosTS6133, variables sin usar), yga-react-components186. Un pasotsc --noEmiten la CI habría detectado los nombres que faltan. - Un archivo de bloqueo desactualizado. En
ReactComponents/ga-react-components,pnpm install --frozen-lockfilefalla conERR_PNPM_OUTDATED_LOCKFILE: faltan enpnpm-lock.yaml21 dependencias depackage.json, y las versiones de@react-three/dreiy@react-three/fiberdifieren. Instalé sin--frozen-lockfile, así que los recuentos de errores de la biblioteca de componentes pueden depender de las versiones que obtuve. - Estados que el tipo excluye.
ForceRadiant.tsx, líneas 721 y 725, compara unGovernanceHealthStatuscon'ok'y'critical', que la unión no contiene (TS2367), yDataLoader.ts, líneas 276-278, pasa elhealthStatus: stringde un mensaje SignalR a través deas unknown as GovernanceNode. O a la unión le faltan dos estados, o las comparaciones son código muerto (por verificar en el hub de GA). La línea 1464 del mismo archivo compara una severidad de señal,'info' | 'warning' | 'emergency', con'critical'. La lección 3 reduce el primer caso. noImplicitAny: falsejunto astrict: trueenga-react-components/tsconfig.app.json. Volver a activarlo solo añade cuatro errores, enBSPDoomExplorer.tsxeIxqlFormPanel.tsx; la lección 2 los lista.- Datos sin comprobar. La biblioteca de componentes tiene 34
as unknown as, 42 llamadas aJSON.parsey 18as any. La cámara se restaura desdelocalStorageconJSON.parse(saved) as { px: number; … }(ForceRadiant.tsx, línea 3558),loadQueue<T>devuelveJSON.parsecomo unT[](CourseViewer.tsx, línea 152), y elisApiResponse<T>dega-clientcomprueba dos nombres de propiedad antes de prometer unApiResponse<T>, conjson as Tcomo recurso final (musicService.ts, líneas 17-49). Las lecciones 3 y 4 y sus ejercicios escriben las versiones comprobadas. - TypeScript 7 encuentra más.
tsc -p tsconfig.app.jsonsobre la biblioteca de componentes da 180 errores en 14.7 segundos con la 5.9.3 y 197 en 1.9 segundos con la 7.0.2. Los errores nuevos son nombres de Node.js en dos scripts (TS2591, porquetypesvale ahora[]por defecto),TS2871(“this expression is always nullish”) enBrainstormPanel.tsxlínea 40 yGitHubPollingManager.tslínea 48, yTS2550para.at()enChatWidget.tsxlínea 1254, conlibfijado a ES2020; la 5.9.3 no señaló ninguno de esos códigos. - Detalles.
ga-client/tsconfig.jsontiene"sourceMaps": trueen su nivel superior, dondetsclo ignora; la opción essourceMap, dentro decompilerOptions.src/components/PrimeRadiant/index.tsen la biblioteca de componentes exportaRemediationActiondos veces (TS2300, líneas 101 y 129), yThreeFretboard.tsxlínea 780 usa un tipoGuitarModelStyleque no existe.ShowcasePanel.test.tsxdega-clientusa elglobalde Node.js, que los tipos del proyecto de navegador no declaran.
2026-09-15 — Lo que encontró tsc en este sitio (8ba378e)
Sección titulada «2026-09-15 — Lo que encontró tsc en este sitio (8ba378e)»npx -p typescript@7.0.2 tsc --noEmit en el commit 8ba378e, con el tsconfig.json del sitio, da tres errores, los mismos con la 6.0.3. Ninguno rompe el sitio.
astro.config.mjs, línea 146: la barra lateral importada desrc/streeling-sidebar.jsonno coincide con elSidebarItemUserConfigde Starlight, porque la unión inferida de sus entradas añadefr?: undefineda la entrada que solo tiene traducción al español. La lección 3 explica la inferencia.code/javascript-for-csharp-java/errors/l04_private_outside.js: eltsconfig.jsondel sitio incluye**/*, así quetscverifica el código de los cursos, incluido un fragmento de error que es incorrecto a propósito. Loserrors/*.tsdel curso de TypeScript se recogerán de la misma manera; excluircode/en eltsconfig.jsondel sitio mantendría a los editores y atscen los archivos propios del sitio.src/content.config.ts:astro:contentsolo se declara después deastro sync.
Por verificar
Sección titulada «Por verificar»- El
ReferenceErroren la página/ai-copilotde GA, en un navegador. - Si el hub de gobernanza de GA envía
okycriticalcomo estados de salud. - Qué hace
ForceRadiantde GA con una cámara guardada a la que le falta una coordenada. new[] { 1, "two", null }en C#, citado en la lección 2 como rechazado por falta de un mejor tipo común.- Los comandos de instalación de la lección 1 en Linux y macOS fuera de la CI.