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
eMap.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, eObject.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
,charset
eout
. 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.