メインコンテンツにスキップ

only-throw-error

Error以外の値を例外としてスローすることを許可しません。

🔒

拡張 "plugin:@typescript-eslint/"strict-type-checked" ESLint設定 で有効にすると、このルールが有効になります。

💭

このルールを実行するには 型情報 が必要です。

Errorオブジェクト自体、またはユーザー定義例外の基底オブジェクトとしてErrorオブジェクトを使用したオブジェクトのみをthrowすることをお勧めします。 Errorオブジェクトの根本的な利点は、構築および発生した場所を自動的に追跡することです。

このルールは、例外としてスローできるものを制限します。

no-throw-literalからの移行

このルールは以前はno-throw-literalとして知られていました。古い名前はtypescript-eslintの将来のメジャーバージョンで削除されるため、ユーザーは新しい名前であるonly-throw-errorに移行することをお勧めします。

新しい名前は、同一の機能を持つドロップイン置換です。

このルールは、リテラルやErrorオブジェクトになる可能性のない他の式をスローすることを許可しないことにより、例外をスローする際の整合性を維持することを目的としています。

throw 'error';

throw 0;

throw undefined;

throw null;

const err = new Error();
throw 'an ' + err;

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

const err = '';
throw err;

function getError() {
return '';
}
throw getError();

const foo = {
bar: '',
};
throw foo.bar;
プレイグラウンドで開く

使用方法

.eslintrc.cjs
module.exports = {
"rules": {
// Note: you must disable the base rule as it can report incorrect errors
"no-throw-literal": "off",
"@typescript-eslint/only-throw-error": "error"
}
};

プレイグラウンドでこのルールを試す ↗

オプション

eslint/no-throw-literalのオプションを参照してください。

このルールは次のオプションを追加します

interface Options {
/**
* Whether to always allow throwing values typed as `any`.
*/
allowThrowingAny?: boolean;

/**
* Whether to always allow throwing values typed as `unknown`.
*/
allowThrowingUnknown?: boolean;
}

const defaultOptions: Options = {
allowThrowingAny: false,
allowThrowingUnknown: false,
};

使用しない場合

型チェックされたlintルールは、従来のlintルールよりも強力ですが、型チェックされたlintingを設定する必要があります。型チェックルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンストラブルシューティングを参照してください。

リソース

ESLintコアから❤️を込めて引用。