TypeScript 5.8 congela su API de decoradores y cierra la era experimental
Después de tres años en stage 3, los decoradores de TC39 entran en TypeScript como feature estable. Todo lo que necesitas saber para migrar sin romper nada.
Si llevas tiempo usando TypeScript con decoradores, probablemente tienes en tu tsconfig.json la línea experimentalDecorators: true tan interiorizada que ni la ves. A partir de TypeScript 5.8, eso cambia. Los decoradores salen del modo experimental y pasan a ser una feature de primera clase del lenguaje, alineada con el estándar TC39 Stage 3.

Es una noticia que muchos esperaban con una mezcla de alivio y cautela. Alivio porque llevar años usando algo marcado como "experimental" en producción siempre genera cierta incomodidad. Cautela porque el estándar TC39 tiene diferencias sutiles respecto a la implementación experimental de TypeScript, y eso significa que hay código que necesitará actualizarse.
¿Qué cambia exactamente?
La diferencia más relevante para la mayoría de proyectos está en cómo se invocan los decoradores de clase y método. En la versión experimental, los decoradores recibían el target de una forma; en el estándar TC39, la firma ha cambiado para ser más flexible y composable.
// Decorador experimental (viejo)
function log(target: any, key: string, descriptor: PropertyDescriptor) {
const original = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Llamando ${key}`, args);
return original.apply(this, args);
};
return descriptor;
}
// Decorador TC39 estándar (nuevo)
function log(target: Function, context: ClassMethodDecoratorContext) {
return function (this: unknown, ...args: unknown[]) {
console.log(`Llamando ${String(context.name)}`, args);
return (target as (...a: unknown[]) => unknown).call(this, ...args);
};
}
La firma nueva es más tipada, más predecible y, una vez que te acostumbras, más clara. El contexto que recibe el decorador contiene metadatos útiles: el nombre del miembro, si es estático, si es privado y el tipo exacto de lo que se está decorando.
¿Afecta a Angular, NestJS o MobX?
Esta es la pregunta que más repite la comunidad. La respuesta honesta es: depende de la versión. Los frameworks que llevan años usando decoradores experimentales han estado preparándose para esta transición con distintos niveles de urgencia.
- NestJS ya tiene soporte experimental para los nuevos decoradores en su rama de desarrollo.
- Angular gestionará la transición internamente; los usuarios no deberían notar nada si actualizan Angular junto con TypeScript.
- MobX requiere atención manual: los decoradores de
@observabley@actionnecesitarán actualización.
La buena noticia es que TypeScript 5.8 soporta ambas sintaxis simultáneamente durante un período de transición. Puedes seguir usando experimentalDecorators: true sin romper nada mientras planificas la migración.
Por qué esto importa más allá de la sintaxis
La estabilización de los decoradores en TypeScript no es solo un cambio de API. Es una señal de madurez del ecosistema. Cuando una feature sale de experimental, el equipo de TypeScript se compromete a no romperla en futuras versiones. Eso baja la barrera de adopción para equipos que eran cautelosos con razón.
También abre la puerta a que más librerías adopten decoradores como mecanismo primario de extensión, sabiendo que el suelo bajo sus pies es sólido. En los próximos meses veremos un florecimiento de librerías que usaban decoradores de forma tímida y ahora pueden apostar por ellos con más confianza.
TAGS
Dax Reyes
Sistemas y Kernel
// Related


Por qué la memory safety se ha convertido en prioridad de seguridad nacional
