In this case, it looks like TypeScript unifies the function type parameters. Flow does not unify function type parameters. Instead Flow defines “bounds” for function type parameters. Which is the more expressive choice when type-checking JavaScript.
Consider the following function:
function choose<T>(a: T, b: T): T {
return Math.random() > 0.5 ? a : b;