- Runtime type errors due to different parts of the code not agreeing on implicit type contracts.
- Too much time spent writing tests for trivial things such as parameter type checking (runtime type checking also increases bundle size).
- Lacking editor/IDE integration, because, without static types, it's much harder to get jump-to-definition, mechanical refactoring and other features.
- Being able to write code around data models, which means that we can design our data types first and then our code will basically just "write itself".
These are just some of the advantages of static typing, I describe a few more in a recent blog post about Flow.
- Backed by Facebook which has done an amazing job at growing React and the React community (they also develop React using Flow).
- TypeScript (at the time) was lacking some basic features that Flow already supported such as lookup types, generic parameter defaults and others.