flowからTypeScriptへ移行するときこんな感じでやればいいんじゃないかという案
flowからTypeScriptへ
- ts-migrateをつかう
- 新しく作るページをts化して参照するモジュールにd.tsをかく
ts-migrateを使う
これで倒せるなら最高だが、テストを書いてないと主要なページすべてを動作確認する必要がありそう。ASTで機械的に変更すると言っても何らかのバグを踏み抜いてでかいバグをプロダクションで起こすのはまずい。
e2eテスト、単体テスト、QAを毎回やってるチームなら行けそう。時間が捻出できればだが......
新しいページをts化参照するモジュールにd.tsをかく
とりあえず始められそうでいいんじゃないかなと思った手法。ts化が完了したらd.tsが書いてあるファイルを触った人がjs, d.tsをけしてtsファイルになおしていく感じ。
ただd.tsを書いた後に、古いページを改修することになってd.tsを書いたjsをいじることになったら二度手間感ある....。古いページに手を入れるときにそのページもts化してね〜ってやったときのコストと相談だよな〜て感じもする。
最後に
2番目のほうが受け入れられやすい気がする。どうですか?ASTでバコって変換する系はts-migrate最強感ありますよね〜
flowに対する気持ち
flowのextensionをVSCodeに入れるととんでもなく重くなるんですよね。git switch
するとVSCode固まる......。(解決策知っている人いたら教えて下さい)
TypeScriptはhttps://github.com/microsoft/TypeScriptでコード読んでる分には全然重くなかったし、ホバーして推論結果出すのも爆速だった気がする。
flowはanyに対して許容的というかimport type { Hoge } from "huga"
ってやったときにhugaの型定義がinstallされて無くてもHogeがanyとして扱われるだけで何も怒らないので、そこはやだな〜って思います。
ひたすら文献が少ない。これに尽きる....utility typeとplaygroundとにらめっこしてflowのこれはTypeScriptで書くんだよ〜みたいな謎技術を得てしまった。
もしflowからTypeScriptに変換する際に型定義で困ったときは声かけてください。めちゃくちゃ複雑じゃない限り解けると思います。