typescript/no-non-null-asserted-optional-chain 正しさ
何を禁止するか
オプショナルチェーン式の後に非nullアサーション(!)を使用することを禁止します。
なぜ問題なのか
設計上、オプショナルチェーン式(?.)は、アクセスしようとしているオブジェクトが null または undefined である場合、エラーをスローする代わりにその値として undefined を返します。このようなオプショナルチェーン式の結果に対して非nullアサーション(!)を使用することは矛盾しており、おそらく誤りです。これは、コードが「値がnullまたはundefinedになる可能性がある」と同時に「nullではないと期待している」という二つの相反する状態を示しているためです。
ほとんどのケースでは、以下のいずれかが該当します:
- オブジェクトは
nullにならないので、プロパティの参照のために?.は不要だった。 - 非
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