厳格モードに関するオプション
TypeScript の設定ファイル (tsconfig.json
) には、厳格な型チェックを有効にするための strict
オプションが用意されています。
プロパティ名 | デフォルト値 | 説明 |
---|---|---|
strict | false | Enable all strict type checking options. コンパイル時の様々な厳格な型チェック機能を有効にします。 |
上記の例では、tsconfig.json
で strict
オプションを有効にしていますが、tsc
コマンドのオプションで --strict
と直接指定する方法もあります。
実は、strict
オプションは、下記のようなオプション群をまとめて true
にするためのオプションです。
プロパティ名 | デフォルト値 | 説明 |
---|---|---|
noImplicitAny | false | Raise error on expressions and declarations with an implied any type. |
noImplicitThis | false | Raise error on this expressions with an implied any type. |
alwaysStrict | false | Parse in strict mode and emit “use strict” for each source file. |
strictBindCallApply | false | Enable strict bind , call , and apply methods on functions. |
strictNullChecks | false | Enable strict null checks. |
strictFunctionTypes | false | Enable strict checking of function types. |
strictPropertyInitialization | false | Enable strict checking of property initialization in classes. |
TypeScript 3.8 時点では、strict
オプションを有効にすることで、これらのオプション群がまとめて有効化されますが、将来の TypeScript (tsc) バージョンでは、これらのオプション群は、そのとき推奨される組み合わせに変更されるとされています。
つまり、strict
オプションを有効にしておくと、TypeScript のバージョンを上げたときに、新しいエラーが表示されるようになる可能性があります。
いずれにしても、 strict
オプションは常に有効にして tsc
ビルドする ことで、TypeScript コードの型安全性を高めておくことをお勧めします。
少しずつ strict 対応していく方法
strict
オプションはデフォルトでは false
になっているため、 プロジェクトが巨大化してから strict
オプションを有効化すると、大量のエラーが表示される可能性 があります。
大量のエラーを一気に直さないといけないので大変です。
そのような場合は、下記のように、個別の strict 系オプションを 1 つずつ有効にして対応していきましょう。
JavaScript から乗り換えたコードの場合、下記のような noImplicitAny
によるエラーがたくさん出ると思います。
これは、関数のパラメータの型指定が足りないというエラーですが、これを一気に対応するのは大変なので後回しにするのがよいかもしれません。
次のように、strict
オプションで全ての型チェックをまとめて有効化しておいて、個々の警告を無効にするという指定もできます。
個別の strict 系オプションをすべて true
にして状態で警告が出なくなったら、下記のように書き換えて strict 対応完了です。
こっそり少しずつ strict 対応する方法
strict
オプションによる型チェックでエラーが発生すると、デフォルトでは JavaScript (.js) ファイルの出力が停止されるので、設定ファイル (tsconfig.json
) で strict
オプションを有効化するのは厳しいということがあるかもしれません。
そのような場合は、次のように tsc
コマンドの --strict
オプションで、一時的に厳格な型チェックを有効化することができます。
これでエラーを確認しながら少しずつ TypeScript コードを修正していき、エラーがなくなった時点で tsconfig.json
の strict
オプションを有効化するというのがよいでしょう。
ちなみに、型チェックなどでエラーが発生しても JavaScript (.js) ファイルの出力を停止しないというオプション (--noEmitOnError false
) がありますが、ちょっと危険な香りがするのであまり使わない方がよいと思います。