Um recurso interessante é o envio com TypeScript 4.4. É chamado de análise de fluxo de controle de condições de aliases , o que é bastante complicado.

Neste post, vamos descompactar esse novo recurso e demonstrar como ele contribui para melhorar a legibilidade do código.

Redução de tipo indireto via const

Em 24 de junho de 2021, Anders Hejlsberg fechou um problema no repositório TypeScript GitHub com o título “Indireto tipo estreitamento via const. ” O problema estava aberto desde 2016 e foi fechado porque estava coberto por uma solicitação pull abordando a análise de fluxo de controle de expressões condicionais com alias e discriminantes.

É justo dizer que a comunidade TypeScript ficou muito animada com isso, a julgar pelas duas reações sobre o problema:

Não para mencione o deleite geral no Twitter:

O tweet de Zeh resume o significância da análise de fluxo de controle de condições de alias muito bem:

A falta de estreitamento de tipo com consts me fez repetir o código, ou evitar de forma útil namef consts, muito tempo s

Com este recurso, podemos escrever um código mais legível com menos repetição. Isso é incrível!

Escrever código mais expressivo com TypeScript 4.4

Em vez de mergulhar direto em uma explicação do que é esse novo recurso de linguagem, vamos começar na posição de escrever algum código e veja o que é possível com o TypeScript 4.4 que não podíamos resolver anteriormente.

Aqui está uma função simples que adiciona todos os parâmetros que recebe e retorna o total. É uma função tolerante e permite que você forneça números na forma de strings também. Portanto, ele iria processar’2’com sucesso, assim como faria 2.

Este é, obviamente, um exemplo um pouco artificial, mas é uma boa maneira de demonstrar o novo recurso:

function add (…thingsToAdd: (string | number) []): number {let total=0; for (const thingToAdd de thingsToAdd) {if (typeof thingToAdd===’string’) {total +=Number (thingToAdd); } else {total +=thingToAdd; }} retorno total; } console.log (add (1,’7′,’3′, 9))

Experimente no typescript parque .

Esta função, embora ele funciona, não é super-expressivo. O tipo de thingToAdd===’string’serve a dois propósitos:

Ele restringe o tipo de string | número para string Ele ramifica a lógica, de modo que a string pode ser forçada a um número e adicionada ao total

Você pode inferir isso lendo o código. No entanto, e se o reescrevêssemos para capturar a intenção?

Vamos tentar criar uma constante shouldCoerceToNumber que expresse a ação que precisamos realizar:

function add (… thingsToAdd: (string | número) []): número {deixe total=0; for (const thingToAdd de thingsToAdd) {const shouldCoerceToNumber=typeof thingToAdd===’string’; if (shouldCoerceToNumber) {total +=Number (thingToAdd); } else {total +=thingToAdd; }} retorno total; } console.log (add (1,’7′,’3′, 9))

Experimente no typescript parque .

Este é um código válido. No entanto, o TypeScript 4.3 está engasgando com um erro:

O erro que está sendo mostrado é:

Operador’+=’não pode ser aplicado aos tipos’número’e’string | número’. (2365)

O que está acontecendo aqui? TypeScript não lembra que shouldCoerceToNumber representa um estreitamento de tipo de thingToAdd de string | número para string. Portanto, o tipo de thingToAdd permanece inalterado em string | número quando escrevemos código que depende dele.

Isso tem consequências terríveis. Isso significa que não podemos escrever esse código mais expressivo no qual estamos interessados ​​e seria melhor para os mantenedores de nossa base de código. Isso é o que o TypeScript 4.4, com nosso novo recurso, desbloqueia.

Vamos mudar o playground para usar o TypeScript 4.4 em seu lugar:

Experimente no typescript parque .

Agora que mudamos para o TypeScript 4.4, deliciosamente, não temos mais erros. E, como mostra a imagem, a variável thingToAdd foi reduzida a uma string. Isso ocorre porque a análise de fluxo de controle de condições com alias está em jogo.

Agora estamos escrevendo um código mais expressivo e o TypeScript está nos preparando para seguir nosso caminho.

Leia mais

Este recurso é uma excelente adição à linguagem TypeScript. Deve ter um impacto significativo, positivo e de longo prazo sobre como as pessoas escrevem código com TypeScript.

Para ler mais, verifique o excelente notas de lançamento do TypeScript 4.4 beta . Existem também alguns outros recursos interessantes enviados com este lançamento.

Muito obrigado à equipe do TypeScript por mais uma vez melhorar a linguagem e fazer uma contribuição real para as pessoas serem capazes de escrever código legível.