zent
Version:
一套前端设计语言和基于React的实现
37 lines (30 loc) • 839 B
text/typescript
import { hasOwnProperty } from './hasOwn';
class ExtendableError extends Error {
constructor(message = '') {
super(message);
// extending Error is weird and does not propagate `message`
Object.defineProperty(this, 'message', {
configurable: true,
enumerable: false,
value: message,
writable: true,
});
Object.defineProperty(this, 'name', {
configurable: true,
enumerable: false,
value: this.constructor.name,
writable: true,
});
if (hasOwnProperty(Error, 'captureStackTrace')) {
Error.captureStackTrace(this, this.constructor);
return;
}
Object.defineProperty(this, 'stack', {
configurable: true,
enumerable: false,
value: new Error(message).stack,
writable: true,
});
}
}
export default ExtendableError;