no-unreachable
禁止在 `return`、`throw`、`continue` 和 `break` 语句之后使用无法访问的代码
✅ 推荐
在 配置文件 中使用来自 `@eslint/js` 的 `recommended` 配置将启用此规则
由于 `return`、`throw`、`break` 和 `continue` 语句无条件地退出代码块,因此它们之后的任何语句都无法执行。无法访问的语句通常是错误。
function fn() {
x = 1;
return x;
x = 3; // this will never execute
}
另一种错误是在子类中定义实例字段,其构造函数没有调用 `super()`。子类的实例字段只有在 `super()` 之后才会添加到实例中。如果没有 `super()` 调用,它们的定义将永远不会应用,因此是无法访问的代码。
class C extends B {
#x; // this will never be added to instances
constructor() {
return {};
}
}
规则详细信息
此规则禁止在 `return`、`throw`、`continue` 和 `break` 语句之后使用无法访问的代码。此规则还会标记其构造函数没有 `super()` 调用的子类中实例字段的定义。
此规则的错误代码示例
在游乐场中打开
/*eslint no-unreachable: "error"*/
function foo() {
return true;
}
function bar() {
throw new Error("Oops!");
}
while(value) {
break;
}
throw new Error("Oops!");
function baz() {
if (Math.random() < 0.5) {
return;
} else {
throw new Error();
}
}
此规则的正确代码示例,因为 JavaScript 函数和变量提升
在游乐场中打开
/*eslint no-unreachable: "error"*/
function foo() {
return bar();
function bar() {
return 1;
}
}
function bar() {
return x;
var x;
}
switch (foo) {
case 1:
break;
var x;
}
此规则的额外错误代码示例
在游乐场中打开
/*eslint no-unreachable: "error"*/
class C extends B {
// unreachable
constructor() {
return {};
}
}
此规则的额外正确代码示例
在游乐场中打开
/*eslint no-unreachable: "error"*/
class D extends B {
#x;
#y = 1;
a;
b = 1;
constructor() {
super();
}
}
class E extends B {
#x;
#y = 1;
a;
b = 1;
// implicit constructor always calls `super()`
}
class F extends B {
static #x;
static #y = 1;
static a;
static b = 1;
constructor() {
return {};
}
}
由 TypeScript 处理
在使用 TypeScript 时禁用此规则是安全的,因为 TypeScript 的编译器会强制执行此检查。
TypeScript 必须配置为使用 allowUnreachableCode: false
,才能使其将无法访问的代码视为错误。
版本
此规则是在 ESLint v0.0.6 中引入的。