typescript/prefer-promise-reject-errors 厳格な
何をするか
このルールは、Promise.reject() に Error オブジェクトを渡すことを強制します。
なぜ悪いのか
プロミスの拒否には Error オブジェクトのみを使用することが良い習慣とされています。これは、Error オブジェクトが自動的にスタックトレースをキャプチャするためであり、デバッグに役立ちます。さらに、一部のツールや環境では、拒否理由が Error オブジェクトであることを期待しています。
例
このルールに対して 不正 なコードの例:
ts
Promise.reject("error"); // 文字列で拒否
Promise.reject(42); // 数値で拒否
Promise.reject(true); // 真偽値で拒否
Promise.reject({ message: "error" }); // 普通のオブジェクトで拒否
Promise.reject(null); // nullで拒否
Promise.reject(); // undefinedで拒否
const error = "Something went wrong";
Promise.reject(error); // Errorオブジェクトではない変数で拒否このルールに対して 正しく なコードの例:
ts
Promise.reject(new Error("Something went wrong"));
Promise.reject(new TypeError("Invalid type"));
Promise.reject(new RangeError("Value out of range"));
// カスタムエラークラス
class CustomError extends Error {
constructor(message: string) {
super(message);
this.name = "CustomError";
}
}
Promise.reject(new CustomError("Custom error occurred"));
// Errorオブジェクトである変数
const error = new Error("Error message");
Promise.reject(error);設定
このルールは、以下のプロパティを持つ設定オブジェクトを受け取ります。
allowEmptyReject
type: boolean
default: false
引数なしで Promise.reject() を呼び出すことを許可するかどうか。
allowThrowingAny
type: boolean
default: false
型が any の値でプロミスを拒否することを許可するかどうか。
allowThrowingUnknown
type: boolean
default: false
型が unknown の値でプロミスを拒否することを許可するかどうか。
使用方法
このルールを有効にするには、設定ファイルまたは CLI で次のように使用できます:
json
{
"rules": {
"typescript/prefer-promise-reject-errors": "error"
}
}bash
oxlint --type-aware --deny typescript/prefer-promise-reject-errors