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 引入了可选链(?.),它提供了一种更简洁、 更易读的方式来访问可能为 nullish 的值上的属性。使用可选链代替逻辑与链(&&)或其他模式可以提升代码清晰度。

示例

以下是此规则的错误代码示例:

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 类型标注的操作数。

如何使用

To enable this rule using the config file or in the CLI, you can use:

json
{
  "options": {
    "typeAware": true
  },
  "rules": {
    "typescript/prefer-optional-chain": "error"
  }
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  options: { typeAware: true },
  rules: {
    "typescript/prefer-optional-chain": "error",
  },
});
bash
oxlint --type-aware --deny typescript/prefer-optional-chain

版本

此规则于 v1.39.0 中添加。

参考