I'm more and more thinking that JS is heading in the wrong direction. I'd opt for splitting up JS into two; one is a low level compilation target, something like... I forgot the name now, it was a subset of JS with hints in comments that allowed the interpreter to forego certain checks (mostly around the dynamic nature of e.g. objects) for speed, I believe this predated WASM and co.

Anyway, a simple version of JS or more like bytecode. Then developers can pick whichever language they want. Because these type annotations do not benefit execution, only development.

I’d say WASM is the low level compilation target for JavaScript runtimes.

There is also a proposal for directly shipping ASTs instead of JavaScript source files for performance improvements [0].

[0]: https://github.com/tc39/proposal-binary-ast