For types to help with optimization, those types have to be correct and reliable (i.e. sound). If every line of your app and all of its dependencies are sound, then you should expect a speedup. If there is any unsound code, then you'll have to generate runtime checks to preserve the soundness properties that your optimizer assumes, and those can actually result in _slower_ code.
> Soundness is fine as long as Flow isn’t being too noisy and preventing you from being productive. Sometimes when soundness would get in your way too much, Flow will favor completeness instead. There’s only a handful of cases where Flow does this.
There are stuff that flow doesn't even handle such as inline destructure with types. Imagine how complicated it gets at the engine level of parsing the syntax.
FF devtools also allow you to edit network requests and replay them all in the browser. This was super useful in my QA days as well as for general fun hacking around.
I like to break down need of understanding into a few categories:
- no need to memorize or understand (some domain specific and infrequently-used portion of the API)
- memorize and understand later (it's better to just continue and get a holistic picture than to get off into the weeds analyzing how some framework magic works)
- you should comprehend this fully before continuing (general and recurring patterns for structuring your code)
Well, sure. You have your luck as determined at conception, your luck of upbringing, and then your luck as an adult. They're all luck-based, but qualitatively different.