BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias TypeScript, olhando além do que é divulgado com Matthew Gerstman

TypeScript, olhando além do que é divulgado com Matthew Gerstman

Matthew Gerstman, engenheiro de software sênior do Dropbox, apresentou no ReactiveConf 2019 na cidade de Praga as lições aprendidas no Dropbox após migrarem para o TypeScript há quatro anos atrás. Gerstman descreveu as partes boas, ruins e até mesmo consideradas horríveis do TypeScript, além de como a ferramenta ajudou o Dropbox a lidar com a programação em escala.

Gertsman começou falando ao público sobre uma definição prática dos tipos de dados, como sendo um atributo de dados que informa ao computador como o programador pretende utilizar. Os tipos básicos de TypeScript pré-existentes (como Boolean, String ou Null) podem ser combinados para formar outros tipos, como o tipo any sendo uma forma de contornar o engessamento dos demais, sendo possível guardar qualquer tipo de dado. Em um código TypeScript padrão, os programadores geralmente escrevem o código com as informações de tipos relevantes. Por meio da inferência de tipo, o TypeScript pode detectar ocorrências de incompatibilidade e informar ao usuário sobre essas incoerências em tempo de compilação.

Gerstman ilustrou com exemplos ao vivo como a IDE utiliza o TypeScript para oferecer suporte ao relatório de erros de tipo durante a edição do código. Com uma digitação correta, a IDE entende a forma das escritas esperadas por um componente React e pode chamar a atenção instantaneamente para as formas de escritas que estejam faltando quando chama este componente, em todas as chamadas relevantes do sistema. A IDE também permite aproveitar as definições de TypeScript das bibliotecas de terceiros para permitir o auto completar para os desenvolvedores.

Uma maior facilidade traz consigo um preço. Os tipos podem ser complexos o suficiente para serem difíceis de se entenderem, especialmente para desenvolvedores que estão começando a utilizar o TypeScript agora. De fato, o método filter da popular biblioteca de utilitários lodash possui 14 definições de tipos diferentes, a maioria derivada de outros tipos (possivelmente derivados de outros) com um número significativo de definições de tipos sobrepostos. Gerstman explicou que o teste exige dados muito bem simulados ou o uso de muitos any. Além disso, como o JavaScript avançado se traduz em TypeScript avançado, alguns padrões funcionais como funções de ordem superior, segundo Gerstman, são realmente difíceis de digitar, já que os desenvolvedores precisam saber sobre generics, intersection types, e discriminated unions. Pode até ser que algumas funções não sejam digitadas com precisão suficiente para garantir a segurança da tipificação.

Isso resultou no aviso que Gerstman deu aos desenvolvedores:

O TypeScript será uma pedra no seu caminho nos primeiros meses.

Continuando na lista de possíveis problemas com a ferramenta, Gerstman mencionou que o TypeScript não é estável, pois pode permitir algumas operações cuja segurança não é garantida em tempo de compilação. Parte disso é devido ao seu design, para encontrar um equilíbrio entre assertividade e produtividade. Outro ponto de brecha é que uma base de código pode importar outras bases externas, que podem ser digitadas de maneira inadequada (por exemplo, com uso substancial de any). Sebastian McKenzie, criador do compilador Babel JavaScript e gerenciador de pacotes Yarn, confirmou isso no Twitter:

Os refinamentos das variáveis ​​locais não são seguros no TS e no Flow. Ambos são ruins, mas o TS é pior. Parece óbvio, mas nenhum deles trata corretamente a invalidação de refinamento local. Não estou falando sem conhecimento de causa, isso já causou bugs no meu código.

Como parte da lista de abstrações difíceis de serem digitadas por completo com o TypeScript e que são usadas normalmente pelos desenvolvedores frontend, Gerstman citou o React Context, o React Redux (implementado com o React Context), o Redux Thunk ou o dispatch. Nesses casos, os desenvolvedores geralmente precisam ajudar o sistema de tipificação do TypeScript a inferir os tipos corretos inserindo anotações nos tipos.

Apesar dos pontos mencionados, Gerstman salientou:

Tudo isso vale a pena.

O TypeScript elimina classes de bugs, entre as quais o undefined não é um objeto e o variable não é uma classe de função. Gerstman explicou que, na escala do Dropbox, com centenas de engenheiros em quatro fusos horários diferentes trabalhando na mesmo código, centenas de recursos e milhões de linhas codificadas, o TypeScript forneceu benefícios difíceis de serem replicados e se tornou uma parte essencial do fluxo de trabalho do frontend do Dropbox. Gerstman mencionou:

Na nossa escala, não sei como atualizaríamos nossas bibliotecas sem o TypeScript.

Gerstman forneceu exemplos práticos dos benefícios desta ferramenta no Dropbox. Na experiência do Dropbox, o TypeScript captura a grande maioria das falhas ao atualizar uma biblioteca. O TypeScript permite ao Dropbox dar restrições aos engenheiros, como impedir o uso de alguns métodos em uma biblioteca. De fato, o Dropbox impediu temporariamente o uso de Hooks ou o uso restrito do lodash.

Gerstman acrescentou que, embora o TypeScript não forneça uma documentação e nem testes gratuitos, a ferramenta fornece validação de contrato sobre todo o stack, desde o backend até a biblioteca de componentes. Os desenvolvedores podem utilizá-la para APIs GraphQL, Swagger ou Stone do Dropbox, além de gerar automaticamente tipos de backend no TypeScript. Portanto, as alterações nas APIs são propagadas imediatamente para o frontend e qualquer quebra possível é detectada com antecedência. Por outro lado, quando a equipe de FrontEnd atualiza a biblioteca de componentes, os tipos do TypeScript também permitem detectar os trechos de códigos impactados e corrigir imediatamente o possível desalinhamento que ocorre em outros lugares.

Gertsman alertou, no entanto, que com os desenvolvedores de TypeScript, ainda é necessário escrever os testes, executar as revisões de código e pensar numa arquitetura. Ainda assim, o TypeScript permite que os desenvolvedores não fiquem pensando em outras partes da base do código que são impactadas por uma mudança, e isso é, segundo Gertsman, uma vantagem importante para a manutenção. Como ele mesmo explicou:

A métrica para o sucesso em uma base de código é quantas coisas são necessárias mantermos frescas em nossa cabeça de uma só vez.

Gertsman limitou o custo do TypeScript ao aprendizado, o que pode levar tempo e parecer doloroso no começo, e concluiu argumentando que esse custo não é tão alto em comparação aos benefícios relacionados a uma refatoração bem mais fácil e uma melhor manutenção do código, especialmente em grandes bases de código.

O ReactiveConf é uma conferência anual voltada para desenvolvedores, com palestras abordando as mais recentes tecnologias e tendências no desenvolvimento de software. O ReactiveConf 2019 ocorreu entre os dias 30 de outubro e 1 de novembro de 2019 e é a quinta edição do evento.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT