Once a JavaScript project scales beyond what can fit in your head, JS's initial productivity boost crumbles because you have to constantly double back and make sure your methods/constructors/etc. are correctly used, which properties are optional, etc... A lot of the debugging happens in runtime and god help you if you try to make a breaking change to one of the major classes/apis in your project.
It's not unbearable, but the main reason for using JS is because of the productivity it allows.
With TS for the cost of taking the time to explicitly define your data you get a C#/Java level of debugging that has clear productivity gains and shifts your debugging from the browser/console to the IDE.
And when something doesn't fit the TS model you can just exclude it or only type the wrappers that integrate with the rest of your project.
That and async/await is a godsend over promises.