yaakai.to

🖊

TypeScript 5.6 の Disallowed Nullish and Truthy Checks と ESLint no-constant-binary-expression

TypeScript 5.6 から、常に真または偽になるような意図していない条件式や、Null 合体演算子 (??) を誤って使用している場合にエラーとなるようになりました。

公式のコードを引用すると次のような場合にエラーが発生するようなります。

if (/0x[0-9a-f]/) { } // error: This kind of expression is always truthy.
if (x => 0) { } // error: This kind of expression is always truthy.

特に Null 合体演算子の誤用は、コードが直感に反していることもあり大きな恩恵を得ることが出来そうです。例えば次のコードは options.max が未定義の際に value < 100 と扱われるように思えますが実際にはそうではありません。

return value < options.max ?? 100;
// error: Right operand of ?? is unreachable because the left operand is never nullish.

これは実際には (value < options.max) ?? 100 と扱われます。実数にした適当なコードを実行してみると、結果が予想と異なっていることがわかります。

10 < {}.max ?? 100
// > false

また、この新しい機能は ESLint の no-constant-binary-expression ルールが元になっているようです。