TL;DR

  • TypeScript には 100 を超えるコンパイラオプションがあり、少なくとも noImplicitAny と strictNullChecks は把握しておく必要がある。
  • どちらもプロジェクトが大きくなるほど有効にしにくくなるので、できるだけ早く有効にする。

内容

noImplicitAny

noImplicitAny は、暗黙の any を許すかどうかを指定する。暗黙の any とは、any と書いていないのに、型が any(型が不明)と推論されることである。TypeScript は型情報があるときに最もよく機能するので、基本的には true にする。

false にしてよいのは、JavaScript から TypeScript へ移行している最中だけである。その場合も、できるだけ早く true にする。

strictNullChecks

strictNullChecks は、null と undefined をすべての型の値として許すかどうかを指定する。有効にすると、undefined is not an object のような null や undefined が絡むエラーを捕捉しやすくなる。

一方で、TypeScript を書く難しさも上がる。そのため、TypeScript の初学者がいるチームでは false にする選択もある(優先度は noImplicitAny のほうが高い)。ただし、プロジェクトが大きくなるほど有効にしにくくなるので、できるだけ早く有効にしたほうがよい。

strict とそれより厳しいオプション

strict を true にすると、上の 2 つを含む次のオプションをまとめて有効にできる。tsc --init で生成した設定では、strict: true になっている。

strict より厳しいオプションもある。たとえば noUncheckedIndexedAccess を有効にすると、インデックスシグネチャのプロパティや配列の要素を参照するときに、undefined のチェックが必須になる。次のコードはエラーになる。

const tenses = ["past", "present", "future"]
tenses[3].toUpperCase() // エラー

ただし、範囲内の有効なアクセスにもチェックが必要になるので、tenses[0].toUpperCase() もエラーになる。

キーワード