TL;DR

  • 通常ケースと特別ケースで、戻り値を同じ型にしない。
  • 0、-1、"" を特別な値として使う代わりに、null や undefined を使う。

内容

通常ケースと同じ型の特別な値を避ける

悪い例は Array.prototype.indexOf である。値が見つかればそのインデックスを返し、見つからなければ通常ケースと同じ number 型の -1 を返す。

console.log([1, 2, 3].indexOf(1)) // 値が存在する場合はそのインデックスが返る
console.log([1, 2, 3].indexOf(100)) // 存在しない場合は通常ケースと同じ型の -1 が返る

0、-1、"" を特別な値として使うことは、strictNullChecks をオフにするのと同じである。特別な値を考慮し忘れても型チェックで検出されず、多くのバグがすり抜けてしまう。そこで、特別な値には null や undefined を使う。

null や undefined の意味が曖昧なとき

文脈によっては、null や undefined が何を表すのかが分かりにくいこともある。その場合はタグ付きユニオンを検討するとよい(項目29 有効な状態のみ表現する型を作る)。

キーワード