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;
プレイグラウンドで開くthrow new Error();
throw new Error('error');
const e = new Error('error');
throw e;
try {
throw new Error('error');
} catch (e) {
throw e;
}
const err = new Error();
throw err;
function getError() {
return new Error();
}
throw getError();
const foo = {
bar: new Error(),
};
throw foo.bar;
class CustomError extends Error {
// ...
}
throw new CustomError();
プレイグラウンドで開く使用方法
.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を設定する必要があります。型チェックルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンストラブルシューティングを参照してください。