BT

Novidades O InfoQ vem desenvolvendo uma série de novas funcionalidades para melhorar sua experiência com o site. Confira!

Slack - migrando do JavaScript para o TypeScript

| por Sergio De Simone Seguir 4 Seguidores , traduzido por Diogo Carleto Seguir 2 Seguidores em 10 mai 2017. Tempo estimado de leitura: 3 minutos |

Migrar do JavaScript para o TypeScript na Slack tem sido um desafiador, mas dramaticamente benéfico segundo escreveu o engenheiro desktop na Slack Felix Rieseberg.

A equipe do Slack decidiu migrar para o TypeScript para facilitar o gerenciamento da vasta base de código JavaScript que possuem, e após desistir do uso do JSDoc para documentar as assinaturas de funções, descrever como usar, etc. Em particular, Rieseberg diz ser difícil seguir a abordagem do JSON em uma base de código já existente, uma vez que requer estrita disciplina ao modificar o código e também porque nem sempre é fácil saber qual é o tipo esperado, por exemplo, o que uma promessa (promise) resolve.

Uma das razões pela qual a equipe do Slack escolheu o TypeScript é o fato dele ser um super conjunto de ferramentas JavaScript, tornando possível sua adoção sem mudar uma única linha de código e então gradualmente habilitar funcionalidades como análise de código e incluir as definições de tipo disponíveis para vários pacotes. Ao longo do tempo, eles chegaram ao ponto de habilitar opções avançadas do compilador, como --noImplicitAny para prevenir o compilador de inferir o tipo any. No geral, Rieseberg disse que demorou aproximadamente seis meses para anotar a maioria do código base da app desktop. Durante o processo, o compilador descobriu vários bugs e acelerou o desenvolvimento graças aos avançados recursos de edição, como por exemplo, o recurso auto-completar.

O InfoQ falou com Rieseberg para descobrir mais sobre sua experiência.

Você descreve uma abordagem gradual para habilitar as opções do compilador do TypeScript. Poderia nos fornecer mais detalhes sobre quais opções podem ser habilitadas desde o início, e quais requerem mais trabalho no código existente?

Acredito que o tipo any é um dos argumentos mais fortes para mover uma base de código para o TypeScript. Isso permite uma substituição gradual de todas as declarações any por tipos mais específicos e interfaces ao longo do tempo. À medida que cresce o uso de tipos, mais cedo ou mais tarde as abstrações oferecidas pelos tipos de interseção e união serão apreciadas, o que pode ser assustador para os desenvolvedores novatos ao sistema de tipos. Em minha opinião, uma adoção gradual do TypeScript é principalmente alimentada por aceitar JavaScript existente - O TypeScript tentará entender o seu código e suportar o desenvolvimento tanto quanto possível, e não se recusará a ajudar se você não tem tempo para migrar toda sua base de código de uma vez.

Passar de uma linguagem dinamicamente tipada para uma linguagem estritamente tipada pode abrir oportunidades para redesenhar as coisas. Você já teve esta experiência no Slack?

Nossa conversão para o TypeScript foi feita em sua maioria por nosso desenvolvedor OJ Kwon, que começou o trabalho logo após se juntar a equipe. Ele encontrou várias oportunidades para melhorar a base de código. Particularmente, portar o código para o TypeScript nos ajudou a entender um pouco melhor o fluxo de dados dentro de nossa arquitetura, mas em uma perspectiva mais ampla, revisitar código existente é sempre um convite para repensar a abordagem tomada.

No nível da linguagem, quais destas funcionalidades os ajudou a construir um sistema de tipos expressivo?

Eu particularmente gosto da declaração merging, que nos permite reutilizar tipos e declarações existentes para expressar os objetos com os quais estamos lidando. Além disso, embora certamente menos interessante, os tipos literais de string podem ser encontrados em toda parte em nossa base de código.

Um dos pontos fortes do TypeScript que você destaca é o fato de ele ser um superconjunto de JavaScript. Por outro lado, significa que você não pode ter certeza absoluta sobre nada que você recebe da camada JavaScript pura de sua app. Qual a sua abordagem para isso? Foi problemático de alguma maneira?

É importante dizer que o TypeScript vem com o Salsa, que é um servidor de desenvolvimento que fornece experiência TypeScript ao trabalhar com JavaScript. Esta é a engine que permite que o Visual Studio Code entenda seu JavaScript. Nos demos bem com a combinação de TypeScript, arquivos de declaração e o uso do Salsa durante o desenvolvimento. Eu particularmente gosto da abordagem do TypeScript em relação a arquivos de definição.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT