Executando verificação de segurança...
15

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.

Carregando publicação patrocinada...
10

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).

5

Só pra complementar, quem disse a frase sobre macacos dançando foi Eric Lippert, que já participou dos comitês do JavaScript, Visual Basic e C# (inclusive, foi um dos principais desenvolvedores do compilador desta última). Eu diria que ele entende um pouco de design de linguagens :-)

Falando de maneira geral, as vantagens de se ter tipagem estática são mais evidentes em bases de código grandes (sendo que "grande" é relativo e subjetivo, mas enfim). Não por coincidência, muitas linguagens de tipagem dinâmica que passaram a ser usadas para projetos grandes começaram a adicionar tipos (PHP e Python o fizeram na própria linguagem, para JavaScript optaram por criar outra linguagem "compatível" - na verdade TypeScript é transpilada para JavaScript).

Enfim, o post que contém a frase dos macacos dançando é este, e recomendo a leitura porque tal frase nem é o ponto principal. O texto é uma excelente explicação sobre porque bases de código grandes são mais fáceis de manter com tipagem estática, e te ajuda a entender melhor porque o TypeScript foi criado.


E só pra ser mais exato, a frase completa é:

The by-design purpose of JavaScript was to make the monkey dance when you moused over it.

Em tradução livre:

O objetivo inicial do JavaScript era fazer o macaco dançar quando você passasse o mouse sobre ele.

2

E pra complementar o complemento, ele agora cuida de Hack (quando PHP não era adequado para bases grandes como do Facebook). E as melhores respostas de todo o Stack Overflow são dele.

Obrigado pelo link.

2

Concordo totalmente, o ecossistema JS cresceu muito nos últimos anos, e na verdade continua crescendo de maneira desenfreada, mas nem linguagem em si nem a comunidade estavam preparados pra um "boom" tão grande, nisso começaram a surgir dezenas de frameworks, libs atrás de libs, com a proposta de fazer exatamente isso, permitir códigos e aplicações complexas rodando na linguagem, mas a própria linguagem não estava pronta pra isso. Por isso existem tantos códigos legados que ninguém mais quer saber da existência, a linguagem em si não é preparada pro que querem fazer com ela.

3

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.

2

Isso faz algum sentido também. Eu nem quis ir muito por esse lado, mas dei uma pincelada na minha resposta. Dái existem algumas linguagens que já usam Wasm para resolver isso no browser, se não tem jeito mesmo e tem que rodar nele. E elas tem seus problemas também. A solução simples foi ignorada por todos, então todos pagamos o preço por isso.

3

No lado do cliente, qualquer tentativa de criar aplicações complexas vai ser uma "gambiarra". O TypeScript pode ser uma das opções mais robustas nesse cenário. Tenho notado a tendência da comunidade Rust em desenvolver soluções com frameworks frontend baseados em Wasm. Entretanto Rust, me parece complexo demais para criar apenas interfaces de usuário - apesar da ideia de aplicações end-to-end ser atrativa. Também conheço o Blazor da Microsoft, que tem certa relevância em certos mercados. Não tenho experiência no desenvolvimento, mas como usuário, a experiência não me agradou.

Uma tendência promissora que vejo, é o uso equilibrado e racional do JavaScript, focando na renderização e na experiência do usuário, enquanto a lógica e, se possível, todo estado da aplicação permanecem no backend. Feitos com a tecnologia apropriada para lidar com estas complexidades.

A popularidade do TypeScript no backend é que me deixa mais intrigado. Para mim, indica um problema. Muitos desenvolvedores optam por usar a única linguagem que conhecem para tudo, criando inúmeras ferramentas, às vezes eficazes, para resolver um problema que é na verdade uma decisão clara de projeto e escopo da linguagem.

Por outro lado, a comunidade JS tem feito avanços notáveis em ferramentas robustas para lidar com tipos. Tenho acompanhado superficialmente o Bun e seu suporte nativo ao TypeScript, mas ainda não sei qual vai ser o impacto disso.

2

Concordo com tudo, ou quase, se entendi tudo. Eu acho que JS funciona muito bem para sites, até porque deve ter pouco dele. E de fato evitar um pouco o SPA parece melhor, como eu sempre disse, e parece que é a tendência, até o Blazor novo está investindo nisso. Para aplicações (o que implica ser SPA) o TS tende a ser melhor. Mas para estes casos web ainda não é o ideal :)

2

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.

1

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

1

Cara tudo depende do que você quer fazer, e apenas disso. Se você ver alguém expressando alguma opinião sem base ou fundamento, sobre tal linguagem ser ruim, tal linguagem ser melhor ou coisas do tipo, simplesmente ignore, pessoas assim são mais líderes de torcida do que devs essencialmente.

O VS Code por exemplo roda quase inteiramente em tacnologias web (sendo mais de 90% TypeScript) usando electron, que é basicamente uma ponte pra rodar tecnologias web fora do browser. VS Code obviamente tem seus defeitos mas continua sendo a opção mais escolhida, e quem fala tão mal assim de JS, TS, React entre outros, provavelmente não abre mão do VS Code e suas extenções, e quem não usa, não fica por aí despejando ódio gratuito contra JS pra se sentir superior por usar C ou Python pra programar.

Concluindo, a única coisa que você deve definir antes de pensar em qual linguagem seguir é, "O que eu quero fazer?", e escolher sua linguagem baseada nisso, porque a linguagem no fim não diz nada, mas sim suas habilidades, um bom programador continua sendo um bom programador, seja em C, Java, JavaScript, Python, Rust ou qualquer outra linguagem, no fim são apenas intruções sendo cuspidas pra máquina e o trabalho do programador é organizar essas instruções de maneira concisa e otimizada, independente do if ter ou não parênteses ou de precisar ou não definir ponteiros pra guardar valores. Claro que estudar linguagens de baixo nível nunca vai deixar de ser bem-vindo e até mesmo essencial caso você queira se tornar um diferencial, mas isso já é outro assunto.

1

Valeu pela resposta! Sempre gostei da web pelo motivo que disse acima, pela acessibilidade e de poder fazer coisas incríveis rodando em um browser. Mas, ver o tanto de meme sobre "REACT" e dev de linguagem mais "robusta" falando mal de Dev web me desanima um pouco. Realmente gosto da web, e pretendo saber outras linguagens no futuro, mas agora sendo um iniciante não da para focar em várias linguagens. (Eu acho)
O que as vezes dá um desânimo também é o fato da web ter novidades e atualizações todo santo dia e ver todo mundo falando de novas tecnologias o tempo todo e você preso naquele framework de anos atrás é complicado. Ser iniciante na programação não é nada fácil!

-2

Eu não diria ódio. Só acho complicado precisar de um step de compilação.

JSdoc do the job. Adotarei o que vier primeiro:

  1. type annotations
  2. browsers interpretando typescript