概要
https://www.typescriptlang.org/tsconfig#noImplicitReturns
{
"noImplicitReturns": true
}
関数内で、条件分岐の条件によって明示的なreturn
がされないルートがある場合、コンパイルエラーになります。
このエラーが出る場合、だいたいは設計ミスでもっと良い書き方がある(早期リターンとか関数の分離とか)気もするので、それに気づかせてくれるという意味でとりあえずtrue
にしておけば良い気はします。
詳細
// hogeがfalseの場合に明示的な`return`が無いのでコンパイルエラー
const func = (hoge: boolean) => {
if (hoge) {
return "HOGE!!!";
}
};
// index.ts:1:14 - error TS7030: Not all code paths return a value.
all code paths
っていうのは、条件分岐した場合に全ての状況で、という意味ですね。
// hogeがfalseの場合に明示的にundefinedを返しているのでコンパイルが通る
const func = (hoge: boolean) => {
if (hoge) {
return "HOGE!!!";
}
return;
};
ちなみに、関数の返り値の型を明示的に指定している場合は、このオプションがfalse
であっても型が異なればエラーが出ます。
// "noImplicitReturns": false
// string型を返すことになっているが、hogeがfalseだった場合にundefinedが返るのでコンパイルエラー。
const func = (hoge: boolean): string => {
if (hoge) {
return "HOGE!!!";
}
};
// index.ts:1:31 - error TS2366: Function lacks ending return statement and return type does not include 'undefined'.
// "noImplicitReturns": false
// 返り値の型がundefinedとのユニオン型になったのでコンパイルが通る。
const func = (hoge: boolean): string | undefined => {
if (hoge) {
return "HOGE!!!";
}
};