版本

no-throw-literal

禁止抛出字面量作为异常

通常认为,最佳实践是仅 throw Error 对象本身,或使用 Error 对象作为用户自定义异常基对象的对象。Error 对象的基本优势在于它们会自动跟踪其构建和来源位置。

此规则限制了可以作为异常抛出的内容。最初创建时,它仅阻止抛出字面量(因此得名),但现在已扩展为仅允许可能为 Error 对象的表达式。

规则详情

此规则旨在通过禁止抛出字面量和其他不可能为 Error 对象的表达式,来保持抛出异常时的一致性。

此规则的 错误 代码示例

在 Playground 中打开
/*eslint no-throw-literal: "error"*/

throw "error";

throw 0;

throw undefined;

throw null;

var err = new Error();
throw "an " + err;
// err is recast to a string literal

var err = new Error();
throw `${err}`

此规则的 正确 代码示例

在 Playground 中打开
/*eslint no-throw-literal: "error"*/

throw new Error();

throw new Error("error");

var e = new Error("error");
throw e;

try {
    throw new Error("error");
} catch (e) {
    throw e;
}

已知限制

由于静态分析的限制,此规则无法保证您只会抛出 Error 对象。

此规则的 正确 代码示例,但它们没有抛出 Error 对象

在 Playground 中打开
/*eslint no-throw-literal: "error"*/

var err = "error";
throw err;

function foo(bar) {
    console.log(bar);
}
throw foo("error");

throw new String("error");

var baz = {
    bar: "error"
};
throw baz.bar;

版本

此规则在 ESLint v0.15.0 中引入。

资源

更改语言