My main issues with it, in order of priority, are:
1. The types aren't checked. In theory this wouldn't matter if the type system was sound and package type declarations were always correct, but neither of those are true in practice (even with strict mode and only popular packages), and I see runtime mismatches often enough that it bothers me.
2. I prefer nominal typing, and JavaScript's classes are verbose and usually considered not idiomatic.
3. Not a language issue, but npm packages tend to be worse quality (buggier, less documented, less intuitive) than other ecosystems (cargo and maven).
I prefer strongly-typed languages like Rust or Java. But I'd always develop a project targeting the web in TypeScript and be happy with it.