Skip to content
← Back to rules

typescript/prefer-optional-chain Nursery

💭 This rule requires type information.
⚠️🛠️💡 A dangerous auto-fix and a suggestion are available for this rule.

何をしますか

論理積(&&)演算子、論理和の否定(!||)演算子、または空のオブジェクトを使用する代わりに、簡潔なオプショナルチェーン式を使用することを強制します。

このルールは、可能な限り多くのエッジケースで正しく動作していることを確認するまで「園芸(Nursery)」カテゴリにあります。このルールのロジックは複雑であり、自動修正により一部のエッジケースで論理的な変更が生じる可能性があります。

なぜ悪いですか?

TypeScript 3.7 でオプショナルチェーン(?.)が導入され、値が nullundefined になりうる場合にプロパティにアクセスするより簡潔かつ読みやすい方法が提供されました。論理積の連鎖(&&)や他のパターンではなく、オプショナルチェーンを使用することでコードの明確さが向上します。

このルールに対する誤りの例:

ts
foo && foo.bar;
foo && foo.bar && foo.bar.baz;
foo && foo["bar"];
foo && foo.bar && foo.bar.baz && foo.bar.baz.buzz;
foo && foo.bar && foo.bar.baz.buzz;
foo && foo.bar.baz && foo.bar.baz.buzz;
(foo || {}).bar;

このルールに対する正しい例:

ts
foo?.bar;
foo?.bar?.baz;
foo?.["bar"];
foo?.bar?.baz?.buzz;
foo?.bar?.baz.buzz;
foo?.bar.baz?.buzz;
foo?.bar;

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます:

allowPotentiallyUnsafeFixesThatModifyTheReturnTypeIKnowWhatImDoing

type: boolean

default: false

式の戻り値型を変更する自動修正を許可します。このオプションは不安全と見なされるため、ビルドが破損する可能性があります。

checkAny

type: boolean

default: true

「ゆるい真偽値」のオペランドを検査する際に、型が any のオペランドもチェックします。

checkBigInt

type: boolean

default: true

「ゆるい真偽値」のオペランドを検査する際に、型が bigint のオペランドもチェックします。

checkBoolean

type: boolean

default: true

「ゆるい真偽値」のオペランドを検査する際に、型が boolean のオペランドもチェックします。

checkNumber

type: boolean

default: true

「ゆるい真偽値」のオペランドを検査する際に、型が number のオペランドもチェックします。

checkString

type: boolean

default: true

「ゆるい真偽値」のオペランドを検査する際に、型が string のオペランドもチェックします。

checkUnknown

type: boolean

default: true

「ゆるい真偽値」のオペランドを検査する際に、型が unknown のオペランドもチェックします。

requireNullish

type: boolean

default: false

「ゆるい真偽値」のオペランドを検査する際に、null および/または undefined でない型に指定されたオペランドをスキップします。

使用方法

このルールを設定ファイルまたは CLI で有効化するには、次のように使用できます:

json
{
  "rules": {
    "typescript/prefer-optional-chain": "error"
  }
}
bash
oxlint --type-aware --deny typescript/prefer-optional-chain

参照