需求
在使用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;
}
}