Skip to content
← Back to rules

typescript/no-non-null-asserted-optional-chain 正しさ

This rule is turned on by default.
An auto-fix is available for this rule.

何を禁止するか

オプショナルチェーン式の後に非nullアサーション(!)を使用することを禁止します。

なぜ問題なのか

設計上、オプショナルチェーン式(?.)は、アクセスしようとしているオブジェクトが null または undefined である場合、エラーをスローする代わりにその値として undefined を返します。このようなオプショナルチェーン式の結果に対して非nullアサーション(!)を使用することは矛盾しており、おそらく誤りです。これは、コードが「値がnullまたはundefinedになる可能性がある」と同時に「nullではないと期待している」という二つの相反する状態を示しているためです。

ほとんどのケースでは、以下のいずれかが該当します:

  1. オブジェクトはnullにならないので、プロパティの参照のために ?. は不要だった。
  2. nullアサーションが誤っていて、型安全性の穴を生じさせている。

このルールに違反する不適切なコード例

ts
foo?.bar!;
foo?.bar()!;

このルールに準拠する正しいコード例

ts
foo?.bar;
foo.bar!;

使い方

設定ファイルまたは CLI 経由でこのルールを有効化するには、以下のように記述できます:

json
{
  "rules": {
    "typescript/no-non-null-asserted-optional-chain": "error"
  }
}
bash
oxlint --deny typescript/no-non-null-asserted-optional-chain

参考資料