$ ryokkkke.com/TypeScript/tsconfig.json

noImplicitReturns

概要

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!!!";
  }
};