typescript/prefer-optional-chain Nursery
它的作用
强制使用简洁的可选链表达式,而不是链式逻辑与运算符、 取反的逻辑或运算符,或空对象。
请注意,此规则属于 nursery 类别,因为我们正在确保它在尽可能多的边缘情况场景中都能正确工作。 其逻辑较为复杂,在某些边缘情况下,自动修复可能会导致逻辑变化。
为什么这很糟糕?
TypeScript 3.7 引入了可选链(?.),它提供了一种更简洁、 更易读的方式来访问可能为 nullish 的值上的属性。使用可选链代替逻辑与链(&&)或其他模式可以提升代码清晰度。
示例
以下是此规则的错误代码示例:
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;以下是此规则的正确代码示例:
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:
{
"options": {
"typeAware": true
},
"rules": {
"typescript/prefer-optional-chain": "error"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
options: { typeAware: true },
rules: {
"typescript/prefer-optional-chain": "error",
},
});oxlint --type-aware --deny typescript/prefer-optional-chain版本
此规则于 v1.39.0 中添加。
