The goal of Flow is to find errors in JavaScript code with little programmer effort.
Flow relies heavily on type inference to find type errors even when the program has not been annotated
It precisely tracks the types of variables as they flow through the program.

At the same time, Flow is a gradual type system.
Any parts of your program that are dynamic in nature can easily bypass the type checker
so you can mix statically typed code with dynamic code.

Flow also supports a highly expressive type language.
Flow types can express much more fine-grained distinctions than traditional type systems.
For example, Flow helps you catch errors involving null, unlike most type systems.
