TypeScript - Amor e ódio... pera aí, ódio?
TypeScript
Pra quem não conhece ou não usa, TypeScript nada mais é do que um SuperSet de JavaScript desenvolvido pela microsoft em 2012. A proposta principal do TypeScript é implementar a tipagem explícita de dados ao JavaScript. Desse modo, diminuindo a possibilidade de bugs ao longo do desenvolvimento, contribuindo com a colaboração no código, e potencializando ferramentas de IntelliSense como o Visual Studio IntelliCode por exemplo.
🧑💻️ Minha experiência com TypeScript
Minha experiência individual com o TypeScript foi excelente, já que abriu caminhos na minha mente que jaziam antes trancados por falta de conhecimento do que era tipagem. Obviamente já conhecia o que são Strings, Integers, etc. mas não conhecia a possibilidade de tipagem em objetos, retorno de funções, parâmetros e por aí vai. Uma causa disso foi o uso do JavaScript como linguagem principal desde sempre. Já tinha usado Python antes, mas a tipagem é ainda mais simples que em JavaScript.
Fato é que o TypeScript traz uma experiência de desenvolvimento muito melhor e muito mais avançada do que o JavaScript sozinho é capaz de trazer. Quem nunca se matou tentando destrinchar o erro no código, refazendo lógicas e debugando, pra no fim o problema ser um parâmetro que espera o nome "foo_bar" ao invés de "fooBar". Isso era rotina pra mim usando JavaScript e sempre precisa voltar na documentação pra verificar coisas simples como o nome de parâmetros. Com TypeScript acho que isso nunca mais me ocorreu.
No fim só tive vantagens quando escolhi aprender TypeScript, o qual garante muito mais produtividade e confiança no código, além de melhorar e muito a lógica do código e a maneira de pensar de quem só usava JavaScript. Até a leitura de erros se torna muito mais prática e fácil usando TypeScript.
🤬️ Porque tanto ódio?
Após todas essas vantagens citadas acima, não consigo ver motivos para todo esse ódio ao redor do TypeScript, justificado por muitos pela complexidade a mais que ele traz pro código, o que pra mim não faz o mínimo de sentido a não ser que você goste de escrever código frágil e de difícil entendimento só pra não ter que aprender algo que no fim é tão simples como definir uma variável mas traz uma estrutura absolutamente superior se comparado a códigos sem tipagem (claro que no fim isso vai depender unicamente do próprio desenvolvedor e não da tecnologia sendo utilizada).
Talvez o ódio no fim seja resumido apenas em um preconceito, que não é nada fora do comum na área. Mas no fim das contas a realidade é que o TypeScript veio apenas para ajudar, facilitando não só o entendimento do seu código por outros desenvolvedores e até por você mesmo, mas também o processo de criação de features complexas, além de muitos outros benefícios.
Um dos profissionais de software mais competentes que existe no mundo uma vez disse:
JavaScript foi criado para fazer um macaquinho dançar na tela
Algumas pessoas ficam bravas quando ouvem isso, mas também diz muito sobre ela.
Isso é uma verdade. JS é uma linguagem interessante, tem umas coisas bem legais, e uma delas é ser uma linguagem de script, ou seja, para automatizar pequenas tarefas, e ela é ótima nisso.
Aí as pessoas começaram usar para fazer algo mais complexo, e os códigos viraram aplicações. E aí começou o problema bem descrito na postagem original.
Praticamente todas as linguagens de script começaram ser usadas para fazer aplicações e por isso começaram adotar uma pegada mais orientada a objeto e passar a ter tipagem mais robusta, que é muito importante para aplicações complexas. JS não foi totalmente nisso, por isso TypeScript foi criada. Havia uma necessidade e o comitê rejeitava a mudança.
Dá para fazer tudo com JS, mas com TS é mais fácil quando você tem uma aplicações enormes rodando.
Dá para questionar se deveria ter uma aplicação enorme rodando em um browser, mas isso é outro assunto.
Espero ter ajudado.
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).
A resposta do maniero e a camplementação do kht já são ótimos, mas apenas adicionando os meus dois centavos: Se você precisa de tipos para escrever JavaScript de qualidade, talvez devesse usar uma linguagem onde os tipos são fundamentais e não uma 'gambiarra'. O TypeScript é uma solução muito complexa para um problema demasiado simples.
Como tudo na Ti é volatil e em constante melhoria, é plausivel pensarmos que até esta questão do uso do Typescript um dia caia em desuso.
Isto se o Web Assembly se tornar o padrão de uso na web, permitindo codar em ruby, python ou outras, sendo linguagens já em sua base, bem mais robustas e de sintaxe mais facil e organizada que javascript.
Seria interessante ver javascript voltando a ser novamente uma linguagem de uso apenas para manipulação de html/css, voltando ao que foi desenhado a melhor fazer.
Por isso que, esse negócio de ódio de linguagem é tão nada a ver. É o mesmo que ter ódio de chave philips, pois a chave de fenda já encaixa em todas. Encaixa, mas a philips auxilia a ter uma pegada melhor. E dai lançam a chave elétrica, que auxilia em muito mais o trabalho, seguindo o rumo de melhorias constantes. Está ai uma analogia bacana.
Estou iniciando neste grande mundo da programação, e sempre achei legal a ideia de desenvolver sites, pois são acessíveis a diversos dispositivos e quase todos tem uma acessibilidade a pessoas especiais. Recentemente tive a oportunidade de estudar mais um pouco para uma vaga de estágio em uma empresa, onde utilizam Reactjs com TypeScript para a web.
Mas, a quesrao é: Eu estou inciiando agora, e ouço a cada dia falarem mal de React e de outras tecnologias, e que JS não presta para grandes aplicações e blá blá blá. Eu fico com medo de ter focado na linguagem errada primeiro, e fico receioso em estar perdendo tempo aprendendo JS no começo, pois não quero ser dev de pequenas aplicaçõezinhas. Devo parar com JS e aprender C? Devo continuar com JS, pegar meu primeiro estágio e aprender C? Tenho uma base de linguagens POO de natureza pois no curso técnico aprendo Java principalmente
Eu não diria ódio. Só acho complicado precisar de um step de compilação.
JSdoc do the job. Adotarei o que vier primeiro:
- type annotations
- browsers interpretando typescript