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.

什么是它所做的

强制使用简洁的可选链表达式,而不是嵌套的逻辑与运算符(&&)、取反的逻辑或运算符(||)或空对象。

请注意,此规则目前处于“育婴室”类别,因为我们正在尽可能多地确保其在各种边缘情况下的正确性。该规则的逻辑较为复杂,自动修复功能在某些边缘情况下可能会导致逻辑变更。

为什么这是不好的?

TypeScript 3.7 引入了可选链(?.),它提供了一种更简洁、更易读的方式来访问可能为 null 或 undefined 值的属性。使用可选链替代逻辑与链(&&)或其他模式,可以提升代码的清晰度。

示例

此规则的错误代码示例:

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

默认值: false

允许会改变表达式返回类型的自动修复。此选项被认为是不安全的,因为它可能导致构建失败。

checkAny

type: boolean

默认值: true

检查类型为 any 的操作数,在检查“宽松布尔”操作数时。

checkBigInt

type: boolean

默认值: true

检查类型为 bigint 的操作数,在检查“宽松布尔”操作数时。

checkBoolean

type: boolean

默认值: true

检查类型为 boolean 的操作数,在检查“宽松布尔”操作数时。

checkNumber

type: boolean

默认值: true

检查类型为 number 的操作数,在检查“宽松布尔”操作数时。

checkString

type: boolean

默认值: true

检查类型为 string 的操作数,在检查“宽松布尔”操作数时。

checkUnknown

type: boolean

默认值: true

检查类型为 unknown 的操作数,在检查“宽松布尔”操作数时。

requireNullish

type: boolean

默认值: false

在检查“宽松布尔”操作数时,跳过那些未使用 null 和/或 undefined 类型声明的操作数。

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

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

参考资料