I don't think I've talked to anyone who has gotten "over the hump" with TS and felt like they were missing something from JS - I may be in a bubble though. It's almost frustratingly beloved in my experience.
My view is that I’d use TS if I have to but I’d pick either plain JS / CLJS or something like purescript if I really wanted types.
People argue for a toolchain that takes a static language, compiles it to a dynamic one, then runs it with an interpreter on the server side.
Humanity ended shortly thereafter.
Although TypeScript can be added incrementally, in practice I've only seen it totally replace JavaScript.
While I do believe more people prefer TypeScript over JavaScript, I think it's because those people never deep dived JavaScript or bothered to learn it enough to see how powerful it really is. There are also people that just prefer typed languages and will shun languages without static types.
This really is a religious war and boils down to one's opinion. I like JavaScript without typing.
What power am I no longer able to leverage using TypeScript when it's appropriate to do so?
2. What made JS uniquely nice?
I wanted to leave these questions entirely open to answer, but I'll add my own opinion on (2) because I feel compelled: nothing, JS is quite possibly the worst language ever designed. Certainly the worst in widespread use.
Implicit type conversions.
Function scoping.
Null and undefined, what is the difference?
Accessing an undefined variable doesn't throw an exception.
Assigning to an undefined variable without var puts it in the global scope.
No integer type.
I could go on and on. The only reason it has become successful is because it has a monopoly in the browser.
- Actually using any of the distinguishing features of prototypical inheritance is nearly always a bad idea, which makes the use of that model in the first place very questionable. One of the cornerstones of the language is pretty much one big foot-gun, to be wholly avoided.
I plumb forgot that assigning a variable without `var` or `let` put it in the global scope because TypeScript yells at you for it.