Skip to content
← Back to rules

typescript/prefer-promise-reject-errors 严格

💭 This rule requires type information.

它的作用

此规则强制要求向 Promise.reject() 传递一个 Error 对象。

为什么这是不好的?

按照最佳实践,应仅使用 Error 对象来拒绝承诺(Promise)。这是因为 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 的值来拒绝承诺(Promise)。

allowThrowingUnknown

type: boolean

default: false

是否允许使用类型为 unknown 的值来拒绝承诺(Promise)。

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

json
{
  "rules": {
    "typescript/prefer-promise-reject-errors": "error"
  }
}
bash
oxlint --type-aware --deny typescript/prefer-promise-reject-errors

参考资料