I would recommend TypeScript. I was a "pure JS" for years and avoided the GWT, CoffeeScript, and Dart kind of languages. We even avoided Babel as the added value was not there for us).
However, TypeScript is a whole different game, as it is really a superset of JavaScript and let you almost all you can do in JS. The industry support is amazing, most of the major node lib comes with their TypeScript types (from the project itself or from @types/...), and the tooling support in VSCode for example is just amazing.
I looked at Flow a little, and while it seems less intrusive, I am not sure it is as expressive, powerful, and mature as TypeScript typing system.
The trick to realize is that it is not because you have "class", interface, and generics that you have to code JS the Java way. TypeScript does not change your style of writing JS, it just makes it more robust and scalable (with the number of developers & line of code).