export interface ErrorType { code : number | string ; message : string ; } export abstract class BaseCustomError < ET extends ErrorType = ErrorType > extends Error { abstract get status ( ) : number ; get realStatus ( ) { return this . status ; } readonly code : number | string ; readonly errors : any ; constructor ( errorData = '' , public logData ? ) { super ( typeof errorData === 'string' ? errorData : errorData . message ) ; const { code , message , ... other } = typeof errorData === 'string' ? { code : - 1 , message : errorData , } : errorData ; this . code = code ; this . errors = other ; Object . defineProperty ( this , 'logData' , { configurable : true , enumerable : false , } ) ; } }