メインコンテンツまでスキップ

noImplicitAny

noImplicitAnyは暗黙のany型を禁止するコンパイラオプションです。

  • デフォルト: strictが有効の場合はtrue、それ以外はfalse
  • 追加されたバージョン: -
  • TypeScript公式が有効化推奨

暗黙のanyの問題点

型注釈もなく型推論もできない場合、TypeScriptは変数の型をanyにします。これを暗黙のanyといいます。特に引数やプロパティで暗黙のanyになることが多いです。

暗黙のanyが発生する例
ts
function foo(param) {}
(parameter) param: any
 
class Bar {
private prop;
(property) Bar.prop: any
}
暗黙のanyが発生する例
ts
function foo(param) {}
(parameter) param: any
 
class Bar {
private prop;
(property) Bar.prop: any
}

any型の変数には型チェックが無いため、バグの危険性が増します。

ts
function increment(number) {
console.log(number + 1);
}
increment("1");
"11"
increment(undefined);
NaN
ts
function increment(number) {
console.log(number + 1);
}
increment("1");
"11"
increment(undefined);
NaN

noImplicitAnyで暗黙のanyを防ぐ

noImplicitAnytrueにすると、変数が暗黙のanyになることを避けられます。TypeScriptは暗黙のanyになる変数を見つけると、警告を出すようになります。

暗黙のanyが警告される例
ts
function foo(param) {}
Parameter 'param' implicitly has an 'any' type.7006Parameter 'param' implicitly has an 'any' type.
 
class Bar {
private prop;
Member 'prop' implicitly has an 'any' type.7008Member 'prop' implicitly has an 'any' type.
}
暗黙のanyが警告される例
ts
function foo(param) {}
Parameter 'param' implicitly has an 'any' type.7006Parameter 'param' implicitly has an 'any' type.
 
class Bar {
private prop;
Member 'prop' implicitly has an 'any' type.7008Member 'prop' implicitly has an 'any' type.
}

関数の戻り値の型

関数の戻り値の型は型注釈がなくても、TypeScriptが型推論可能なため暗黙のanyにはなりません。したがって、型注釈の無い戻り値は、noImplicitAnyを有効にしても警告は出ません。

ts
function foo() {
function foo(): number
return 1;
}
ts
function foo() {
function foo(): number
return 1;
}

戻り値の型注釈を必須にしたい場合は、noImplicitReturnsを有効にしてください。

学びをシェアする

😢TypeScriptは型注釈がないOR型推論不能の場合、型をanyにする(暗黙のany)
🙅‍♂️noImplicitAnyは暗黙のanyを禁止するコンパイラオプション
😊これをtrueにすると暗黙のanyが警告される
✅有効化推奨のオプション

『サバイバルTypeScript』より

この内容をツイートする

関連情報

📄️ strict

strict系のオプションを一括で有効化する

📄️ any型

TypeScriptのany型は、どんな型でも代入を許す型です。プリミティブ型であれオブジェクトであれ何を代入してもエラーになりません。

📄️ 関数宣言

関数宣言はJavaScriptで関数を定義する構文です。

📄️ フィールド

JavaScriptでインスタンスにフィールドを持たせるには、インスタンス化したオブジェクトのプロパティに値を代入します。