Novas Funcionalidades do TypeScript 5.4

2025.12.02

Visão Geral do TypeScript 5.4

O TypeScript 5.4 foi lançado em março de 2024, adicionando funcionalidades que melhoram a experiência do desenvolvedor, como melhorias na inferência de tipos e o tipo NoInfer.

Tipo Utilitário NoInfer

NoInfer<T> é um tipo utilitário que previne a inferência de parâmetros de tipo em posições específicas.

Código Problemático (antes do 5.4)

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

// 'blue' também é inferido
createStreetLight(['red', 'yellow', 'green'], 'blue');
// → T = 'red' | 'yellow' | 'green' | 'blue'

Solução com NoInfer

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

// Erro! 'blue' não está incluído em 'red' | 'yellow' | 'green'
createStreetLight(['red', 'yellow', 'green'], 'blue');

Cenário de uso: Útil quando você quer inferir o tipo a partir de apenas alguns argumentos em funções genéricas.

Melhoria no Refinamento de Tipos em Closures

O type guard dentro de closures ficou mais inteligente.

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

Suporte para Object.groupBy e Map.groupBy

Definições de tipo foram adicionadas para os novos métodos de agrupamento.

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

Você pode especificar atributos ao importar módulos como JSON.

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

// Import dinâmico
const data = await import('./data.json', {
    with: { type: 'json' }
});

Outras Melhorias

  • Melhoria no suporte a tipos para require(): Interoperabilidade entre ESM e CJS melhorada
  • Melhoria em —moduleResolution bundler: Resolução mais precisa em ambientes de bundler
  • Melhoria no suporte do editor: Renomeação e organização de imports melhoradas

Resumo

O TypeScript 5.4 permite tipagem mais precisa e conforme a intenção através do tipo NoInfer e melhorias na inferência de tipos em closures. O suporte a tipos para Object.groupBy também é uma melhoria útil na prática.

← Voltar para a lista