no-throw-literal
Запрет на бросание литералов в качестве исключений
Считается хорошей практикой использовать только throw сам Error объект или объект, использующий Error объект в качестве базовых объектов для пользовательских исключений. Основное преимущество Error объектов заключается в том, что они автоматически отслеживают место своего создания и происхождение.
Это правило ограничивает то, что может быть брошено как исключение. При его первоначальном создании оно только предотвращало бросание литералов (отсюда и название), но сейчас оно расширено, чтобы допускать только выражения, которые потенциально могут быть Error объектом.
Подробное описание правила
Это правило направлено на поддержание согласованности при броске исключений, запрещая бросать литералы и другие выражения, которые не могут быть Error объектом.
Примеры некорректного кода для этого правила:
/*eslint no-throw-literal: "error"*/
var err = new Error();
// err is recast to a string literal
var err = new Error();
Примеры корректного кода для этого правила:
/*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 baz = {
bar: "error"
};
throw baz.bar;
Версия
Это правило было введено в ESLint v0.15.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-throw-literal