TypeScript 5.4, uma atualização planejada para a variante JavaScript fortemente tipada da Microsoft, passou para o estágio de candidato a lançamento. Os novos recursos da versão 5.4 incluem estreitamento preservado nos fechamentos de funções criados após a última atribuição e um tipo NoInfer para bloquear inferências para tipos válidos, mas indesejados.

O release candidate foi publicado em 22 de fevereiro, após uma versão beta de 29 de janeiro. Um lançamento final é esperado em 5 de março. O TypeScript 5.4 pode ser acessado via NuGet ou NPM. No NPM, use o seguinte comando:

npm install -D typescript@rc

Desde a versão beta, as notas de versão foram atualizadas para documentar mudanças comportamentais notáveis, incluindo restrições em torno dos recursos de enum, melhorias no comportamento do tipo mapeado e restrições na nomenclatura de membros de enum.

Detalhando a melhoria do estreitamento de tipos, a Microsoft disse que um problema comum no TypeScript era que os tipos estreitados nem sempre eram preservados nos fechamentos de funções. No TypeScript 5.4, quando parâmetros e let variáveis ​​são usadas em funções não içadas, o verificador de tipo procurará um último ponto de atribuição. Se um for encontrado, o TypeScript pode restringir de fora da função que o contém.

TypeScript 5.4 também apresenta um NoInfer<T> tipo de utilitário. Cercando um tipo em NoInfer<…> dá um sinal ao TypeScript para combinar os tipos internos para encontrar candidatos para inferência de tipos. O tipo de utilitário resolve um problema no qual o TypeScript pode inferir argumentos de tipo de tudo o que é passado. Mas nem sempre é claro qual é o melhor tipo a ser inferido, levando o TypeScript a rejeitar chamadas válidas e cometer outros erros.

Outras melhorias no TypeScript 5.4:

  • O TypeScript verifica com mais precisão se as strings podem ou não ser atribuídas aos slots de espaço reservado de um tipo de string de modelo.
  • Novas restrições de atribuição foram introduzidas para enums. Anteriormente, quando duas enums tinham os mesmos nomes e os mesmos nomes de membros de enum, elas eram consideradas compatíveis, mas o TypeScript permitia silenciosamente que tivessem valores diferentes. O TypeScript 5.4 exige que os valores sejam idênticos (quando conhecidos). Também existem novas restrições para quando um dos membros do enum não possui um valor estaticamente conhecido. E o TypeScript não permite mais que enums usem os nomes Infinity, -Infinity ou NaN.
  • Declarações são adicionadas para o novo JavaScript groupBy e Map.groupBy métodos estáticos. Object.groupBy leva um iterável e uma função que decide em qual grupo cada elemento deve ser colocado. A função deve criar uma chave para cada grupo distinto, e Object.groupBy usa essa chave para criar um objeto onde cada chave é mapeada para um array contendo o elemento original. Map.groupBy é semelhante, mas produz um mapa em vez de um objeto simples.
  • Foi adicionado suporte para require( ) liga --moduleResolution bundler e --module preserve.
  • Atributos e asserções de importação agora são verificados em relação ao global ImportAttributes tipo. Isso significa que os tempos de execução agora podem descrever com mais precisão os atributos de importação.
  • Uma correção rápida permite adicionar um novo parâmetro a funções chamadas com muitos argumentos.
  • O TypeScript agora reduz as interseções com variáveis ​​de tipo e primitivas de forma mais agressiva, dependendo de como a restrição da variável de tipo se sobrepõe a essas primitivas.
  • Depreciações foram adicionadas no TypeScript 5.0, como target: ES3 código, NoImplcitUseStrict, charsete out. O TypeScript 5.4 provavelmente será a última versão em que a lista de descontinuações continuará funcionando normalmente.

TypeScript 5.4 segue o antecessor TypeScript 5.3, lançado em novembro de 2023 e apresentando atributos de importação para módulos ECMAScript.