I've spend quite a bit of time doing javascript and typescript lately. Typescript definitely patches up a lot of the ugliness of javascript but you still deal with the same messy ecosystem of tools, libraries, and other cruft. It's been slowly getting better over the years but it's still not that great. I see typescript more as a gateway drug for people who seem to think that Javascript is all there is and then discover that actually having a type system unlocks all these amazing new tools that the rest of our industry has been enjoying for a few decades.

Guess what, if you like typescript, you'll love Kotlin. It's a much cleaner language, just as expressive, and it has a whole range of things that typescript simply can't do or that it simply does better/more elegantly because typescript is stuck preserving compatibility with javascript and all it's weirdness. MS has done a wonderful job of shoving a lot of that under the carpet with typescript but fundamentally types are optional because all javascript has to be valid typescript and therefore it has to also allow all the silly hacks, misguided features, and other cruft that javascript people have been coming up with for the past decades.

You might also like C#, Rust, Elixir, and several other languages that each offer their own tools, libraries, and features. I'm seeing a pattern with many frontend developers in the last few years that they at some point become full stack developers and shortly after start adding more languages to their repertoire. I know former node.js developers doing Rust, Go, Elixir, Kotlin, Rust, etc. now. Most of them are not very eager to move back to doing node.js projects.

Like Kotlin all these languages are all coming to the node.js/browser ecosystem through WASM. Full stack in 2020 is going to be a very different beast than just a few years ago.

Right now WASM already allows lots of languages to be used for just about anything that people currently do with javascript and typescript in browsers or in the node.js ecosystem. As this becomes more mature, people are inevitably going to change the ecosystem. This is already happening. E.g. Rust is being used for many low level npms for a few years now. However people have also been developing frameworks and libraries in Rust that work around/replace that ecosystem entirely. For a Rust person dealing with crates is preferable to dealing with npms, webpack and all the other stuff that is used in that ecosystem. So, they are fixing that. The goal there is to run pure rust in wasm in the browser or on v8 with 0 npms pulled in or used during the build process.

Likewise, there's an ecoysystem of multi platform kotlin libraries emerging and that allows you to build wasm or native applications and libraries without needing things like webpack, npm, etc (but using gradle instead). Same with C# and blazor. Each of those ecosystems uses browsers and node.js as runtimes but try to minimize/eliminate/replace most of the rest of that ecosystem. In the same way the Kotlin ecosystem is also starting to provide alternatives to stuff from the java EE and Spring ecosystem. E.g. Ktor is a multi platform web application framework that you can use instead of spring boot and run natively or on the jvm. It's also a drop in replacement for anything you might want to do with e.g. express.js. Doing express.js applications in Kotlin is of course also possible, but why would you when you can have ktor instead? In the same way building react applications in Rust is possible, but replacing it with a rust specific framework is much less awkward.

So, I agree things are changing but I'd say the node.js/browser landsace is changing as well and will not involve a whole lot of javascript/typescript for people coming from the JVM or other ecosystems.

You might make the point that there are all these millions of npms out there that can't be replaced easily. I'd counter that with the point that an awful lot of them seem to have very short shelf lives and are in fact replaced/discarded regularly.