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