I find this question quite intriguing. As a member of the Flow team, I am eager to provide a comprehensive answer, although the solution may not be straightforward at the moment.
Before delving into transitioning from TypeScript to Flow, it is essential to ponder on the reasons behind this shift. Evaluating whether investing time in switching is beneficial for an ongoing project is crucial.
If you decide that the switch is worthwhile, I will outline what I believe to be the best approach.
Gradual Migration
Avoiding a complete halt and re-write is imperative, as starting over entirely would be counterproductive. At Facebook, we prioritize incremental migration when introducing static types with Flow.
While moving between different static type systems can be challenging, the transition might be smoother due to prior familiarity with type-centric development.
Take your time moving one file at a time, strategically dividing tasks to prevent overwhelming yourself with an extensive workload.
Quality Library Definitions
Flow strives to deduce information whenever possible, but having well-defined library annotations significantly improves application performance. Focus on migrating libdefs to Flow by utilizing existing ones or creating custom definitions. For in-depth insights, I wrote a detailed article on this topic.
Remember to share any libdefs you create with the community by contributing to this repository!
Configuring Your Build System
In contrast to TypeScript's integrated compilation and type checking, Flow separates these processes, providing multiple options. Babel is commonly recommended for most scenarios; if you are new to setting up Babel, you can refer to this interactive guide. Additionally, I crafted a post on further steps after setup.
Expect challenges along the way during this process. Do not hesitate to reach out so we can assist you and address any issues to benefit future users faced with similar difficulties.
I hope this guidance proves valuable to your endeavor. Enjoy the journey :)