@types/react-native がズレる問題

react-native のプロジェクトを typescript でやる時とりあえず devDependecies に @types/react-native を追加する。 その時の最新バージョンで入る。例えば ^0.57.27 みたいな感じ。

次に react-navigation も使いましょうということで @types/react-navigation を入れる。これは dependecies に "@types/react-native": "*" が指定されている。これは最新が指定されていることなので、結果同じ 0.57.27 が入る。

react-native の version をあげたり、types ファイルが間違っているからということで devDependecies の方をあげる。例えば 0.58.0 が入る。でも react-navigation が依存している types/react-native は上がらない。

結果として補完の時とかに定義が食い違って typescript のエラーが起きる。

一括で全部あげられるといいけど良い方法がわからなかったので

  "devDependencies": {
    "@types/react-native": "^0.57.0"
  },
  "resolutions": {
    "**/@types/react-native": "^0.57.0"
  },

こんな感じで yarn の resolutions を使って依存している types/react-native も一緒のものを使うように強制した。 乱暴な感じもするけど、型定義が食い違うとかなりストレスなのでまだこれの方がマシ。