Bonus points because it will hot-reload code (figwheel) without destroying your current state. Speaking of state, you can see the entire state of your application with re-frisk, which also shows all the events going into the system. Really wonderful stuff.
Been doing imperative / oo for years so this is quite different but I’m persevering because I’ve bought into the reactive UI for web apps and JS just seemed like a total mismatch
I'm a full time Scala dev though, so I'm totally biased
Just finished porting a legacy 5K Coffeescript front end over to Scala.js. Having a typed front end with all the power of Scala completely transforms the browser development experience. Great stuff.
Only major drawback is generated js binaries incur a 160KB "tax", primarily due to size of Scala collections. Though, FWIW, the front end weighs in at 232KB non-gzip'd, and was able to scrap jQuery + DataTables + Modal window and Validation plugin dependencies -- shaved off about 200KB compared to previous front end.
Have you tried Kotlin's javascript backend?
ts2kt - https://github.com/kotlin/ts2kt
type definitions for many libraries - http://definitelytyped.org/
dynamic type - https://kotlinlang.org/docs/reference/dynamic-type.html
Generates large js binaries, poor js interop; it's well behind the curve compared to Scala.js and Clojurescript on the JVM.
Think they're putting all their developer eggs into the Native basket, which makes sense, iOS + Android would be huge for the language's adoption.
Combine those with Babel or other ES6 transpilers, a linting and build system, and you've got yourself a pretty decent environment.
Personally I find working with JS far more fun (this phrase is used loosely) than working with Java.
Make sure you set your linter and typescript compile settings to be really strict. It will remind you a lot of Java/C#