Vindo da linguagem Java, uma das coisas que mais me incomoda no JS é a falta de clareza que ele te fornece sobre o que um objeto pode fazer, como quais métodos e atributos pode acessar; nos forçando a sempre ter uma documentação aberta para consultar, pois a linguagem não te "fala" o que você pode fazer.
Pelo que eu entendi, o JS só faz a verificação de tipos em tempo de execução, fazendo com que ao codificar uma aplicação, seja comum nos depararmos com "any", nos deixando sem saber tudo aquilo que aquele objeto em questão faz. Fico pensando que, em projetos grandes e com muitas libs diferentes, essa falta de clareza comece a se tornar um pesadelo muito pior do que já é.
Já tem um tempo que ouço falar do TypeScript e sobre como ele "corrige" o JS, adicionando uma camada de verificação de tipos ao JS. Sobre essa situação de comumente nos encontrarmos sem saber o que é e o que faz um objeto, o TypeScript resolve de vez? Nunca mais eu terei uma variável que eu não sei o que faz?