版本

no-throw-literal

禁止將字面值作為例外拋出

throw Error 物件本身,或使用 Error 物件作為使用者定義例外基底物件的物件,被認為是良好的實踐。Error 物件的基本好處是它們會自動追蹤它們的建立和來源位置。

此規則限制了可以作為例外拋出的內容。當它最初建立時,它只防止拋出字面值(因此得名),但現在它已擴展為僅允許可能為 Error 物件的表達式。

規則詳情

此規則旨在通過禁止拋出字面值和其他不可能為 Error 物件的表達式,來維護拋出例外時的一致性。

此規則的錯誤程式碼範例

在遊樂場中開啟
/*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}`

此規則的正確程式碼範例

在遊樂場中開啟
/*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 中引入。

資源

變更語言