有风塘主
发布于 2024-11-28 / 31 阅读
0
0

在Typescript里继承Error的最佳实践

需求

在使用Typescript 的前端项目里通过继承Error类,编写各种具有一定业务含义的错误类,是个很好也很常见的开发模式,例如常见的有:

AuthError-鉴权错误类ValidationError-校验错误类BizError-业务错误类DatabaseError-数据库错误类ApiError-API错误类 等。

但是如何更好的继承Error类来实现各种能力,提升开发体验,是需要思考的。

实现:基础错误类

直接上代码:

// 使用 BaseError 当作 base Error class
class BaseError extends Error {
  constructor(message: string) {
    super(message);
    this.name = new.target.name;
    if (typeof (Error as any).captureStackTrace === 'function') {
      (Error as any).captureStackTrace(this, new.target);
    }
    if (typeof Object.setPrototypeOf === 'function') {
      Object.setPrototypeOf(this, new.target.prototype);
    } else {
      (this as any).__proto__ = new.target.prototype;
    }
  }
  
  get isBaseError() {
    return true;
  }
}

应用:鉴权错误类

直接上代码

class AuthError extends BaseError {
  get isAuthError() {
    return true;
  }
}


评论