# no-throw-literal
不允许将字面作为异常抛出
仅将 Error
对象本身或使用 Error
对象的对象作为用户定义异常的基础对象进行 throw
被认为是一种很好的做法。Error
对象的根本好处是它们会自动跟踪它们的构建和起源。
此规则限制了可以作为异常抛出的内容。当它第一次被创建时,它只阻止字面被抛出(因此得名),但现在它已经被扩展为只允许有可能成为 Error
对象的表达式。
# 规则详情
此规则旨在通过禁止抛出不可能是 Error
对象的字面和其他表达式来保持抛出异常时的一致性。
此规则的错误代码示例:
/*eslint no-throw-literal: "error"*/
/*eslint-env es6*/
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}`
此规则的正确代码示例:
/*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
对象:
/*eslint no-throw-literal: "error"*/
var err = "error";
throw err;
function foo(bar) {
console.log(bar);
}
throw foo("error");
throw new String("error");
var foo = {
bar: "error"
};
throw foo.bar;