Nuevas Funciones de TypeScript 5.4

2025.12.02

Descripcion General de TypeScript 5.4

TypeScript 5.4 fue lanzado en marzo de 2024, agregando funciones que mejoran la experiencia del desarrollador, como mejoras en la inferencia de tipos y el tipo NoInfer.

Tipo de Utilidad NoInfer

NoInfer<T> es un tipo de utilidad que previene la inferencia de parametros de tipo en posiciones especificas.

Codigo Problematico (antes de 5.4)

function createStreetLight<T extends string>(
    colors: T[],
    defaultColor: T
) {
    // ...
}

// 'blue' tambien se infiere
createStreetLight(['red', 'yellow', 'green'], 'blue');
// → T = 'red' | 'yellow' | 'green' | 'blue'

Solucion con NoInfer

function createStreetLight<T extends string>(
    colors: T[],
    defaultColor: NoInfer<T>
) {
    // ...
}

// Error! 'blue' no esta incluido en 'red' | 'yellow' | 'green'
createStreetLight(['red', 'yellow', 'green'], 'blue');

Escenario de uso: Es conveniente cuando deseas inferir el tipo solo de algunos argumentos en funciones genericas.

Mejora en la Reduccion de Tipos en Closures

Los type guards dentro de closures se han vuelto mas inteligentes.

function getUrls(url: string | URL, names: string[]) {
    if (typeof url === 'string') {
        // Antes: url permanecia como string | URL
        // 5.4: url se reduce a string
        return names.map(name => {
            return url + '/' + name;  // OK!
        });
    }
    return names.map(name => url.href + '/' + name);
}

Soporte para Object.groupBy y Map.groupBy

Se han agregado definiciones de tipos para los nuevos metodos de agrupacion.

const users = [
    { name: 'Alice', age: 25 },
    { name: 'Bob', age: 30 },
    { name: 'Charlie', age: 25 }
];

// Object.groupBy
const byAge = Object.groupBy(users, user => user.age);
// { 25: [...], 30: [...] }

// Map.groupBy
const byAgeMap = Map.groupBy(users, user => user.age);
// Map { 25 => [...], 30 => [...] }

Import Attributes

Puedes especificar atributos al importar modulos como JSON.

import config from './config.json' with { type: 'json' };

// Importacion dinamica
const data = await import('./data.json', {
    with: { type: 'json' }
});

Otras Mejoras

  • Mejora en soporte de tipos para require(): Mejor interoperabilidad entre ESM y CJS
  • Mejora en —moduleResolution bundler: Resolucion mas precisa en entornos de bundler
  • Mejora en soporte del editor: Mejoras en renombrado y organizacion de importaciones

Resumen

TypeScript 5.4, con el tipo NoInfer y las mejoras en la inferencia de tipos en closures, permite un tipado mas preciso y segun la intencion. El soporte de tipos para Object.groupBy tambien es una mejora util en la practica.

← Volver a la lista