We need to talk about costs though. If a type system lets you write 15% fewer unit tests, it's worth it for that alone.
> There are static code analyzers (eg. tern.js) that provide hinting without requiring a transpiler
A static analyser is already a type system. You need a way to hint to the analyser, at which point you've got a notation for types in your language as well (maybe a limited one). You want the analyser to run on every build anyway, so a transpiler is no more effort; if you make the analyser optional developers will skip it, and will introduce bugs as a result, so it's better to simply not have the option.
> With Flow and Typescript you have transpiler overhead, but when it comes to places you might need them the most - checking and sanitizing data interchange that's so common in modular, service-oriented architecture - they fall flat.
You need to use types on the interfaces too. Use something like thrift.