La serie TypeScript 5.x ha introducido muchas características que fortalecen el sistema de tipos y mejoran la experiencia del desarrollador. Este artículo destaca las más útiles en la codificación diaria.
Parámetros de tipo const (5.0)
Agregar un modificador const al parámetro de tipo de una función preserva los tipos literales al pasar valores.
function getConfig<T extends readonly string[]>(keys: T): T {
return keys
}
// Antes: inferido como string[]
const config1 = getConfig(['dev', 'staging', 'prod'])
// Con parámetro de tipo const: inferido como tupla de literales
const config2 = getConfig<const>(['dev', 'staging', 'prod'])
// tipo: readonly ["dev", "staging", "prod"]
Esto es útil cuando quieres que las propiedades de un objeto mantengan sus tipos literales. No es necesario escribir as const en el sitio de llamada — el código se mantiene limpio.
Decoradores estabilizados (5.0)
A partir de TypeScript 5.0, los decoradores ECMAScript Stage 3 son compatibles de forma nativa. A diferencia de los decoradores experimentales, ya no necesitas habilitar experimentalDecorators en tus opciones del compilador.
function log(target: any, context: ClassMethodDecoratorContext) {
const methodName = String(context.name)
return function (this: any, ...args: any[]) {
console.log(`${methodName} llamado con`, args)
return target.call(this, ...args)
}
}
class Calculator {
@log
add(a: number, b: number) {
return a + b
}
}
Los desarrolladores que vienen de Angular o NestJS encontrarán familiar la sintaxis, pero ten en cuenta los cambios — ahora sigue la especificación oficial de ECMAScript.
El operador satisfies (4.9 / 5.x)
satisfies te permite verificar que un valor cumple con un tipo mientras mantiene su tipo inferido estrecho.
type Color = 'red' | 'green' | 'blue'
type Palette = Record<string, Color>
const palette = {
primary: 'blue',
secondary: 'green',
// asignar 'yellow' aquí dispararía un error
} satisfies Palette
// palette.primary se infiere como "blue", no string
Con una anotación de tipo tradicional (: Palette), la inferencia se ampliaría a string. satisfies ejecuta la verificación de tipos sin perder la inferencia literal — una clara ventaja.
Resolución de módulos mejorada (5.x)
TypeScript 5.x agrega una opción bundler para moduleResolution. Se alinea con cómo los empaquetadores modernos como Vite y esbuild resuelven módulos.
{
"compilerOptions": {
"moduleResolution": "bundler",
"module": "ESNext",
"target": "ES2022"
}
}
Esto mejora la compatibilidad con el ecosistema moderno: el campo exports en package.json funciona correctamente y puedes importar archivos sin la extensión .ts.
Tipos de plantilla literal prácticos
Los tipos de plantilla literal se introdujeron en 4.1, pero combinarlos con tipos unión en 5.x los hace aún más potentes.
type Size = 'sm' | 'md' | 'lg'
type Variant = 'primary' | 'secondary'
// "btn-sm-primary" | "btn-sm-secondary" | "btn-md-primary" ...
type ButtonClass = `btn-${Size}-${Variant}`
function getButtonClass(size: Size, variant: Variant): ButtonClass {
return `btn-${size}-${variant}`
}
Esto es perfecto para nombres de clases de componentes de UI con seguridad de tipos o rutas de API.
Para concluir
Cada característica de TypeScript 5.x avanza en la misma dirección: mayor seguridad de tipos con menos código repetitivo. satisfies y los parámetros de tipo const son especialmente fáciles de introducir en bases de código existentes y ofrecen valor inmediato. Asegúrate de aprovechar estas nuevas capacidades cuando actualices.

