Nice post! Regarding the section “Call-Site Type Checking”: Isn’t this about Flow inferring the type of the parameter from how it is used inside the function? In the second example, inference doesn’t go far enough — otherwise Flow would demand that its parameter have the property b.
In other words: what do you consider to be the call site in the examples? How is the call site being checked in Flow (in a way that it isn’t in TypeScript)?