Wolę mocniejszą składnię niż opisana powyżej. Dodatkowe metody typu error pomogą ci stworzyć ładną console.log
lub coś innego.
export class CustomError extends Error {
constructor(message, code = 0) {
super();
this.message = message;
this.code = code;
this.name = this.constructor.name;
this.stack = CustomError.createStack(this);
}
toString() {
return this.getPrettyMessage();
}
getPrettyMessage() {
return `${this.message} Code: ${this.code}.`;
}
static createStack(error) {
return typeof Error.captureStackTrace === 'function'
? Error.captureStackTrace(error, error.constructor)
: (new Error()).stack;
}
}
Aby przetestować ten kod, możesz uruchomić coś podobnego:
try {
throw new CustomError('Custom error was thrown!');
} catch (e) {
const message = e.getPrettyMessage();
console.warn(message);
}
CustomError
Mile widziane jest rozszerzenie typu. Możliwe jest dodanie określonej funkcjonalności do typu rozszerzonego lub zastąpienie istniejącego. Na przykład.
export class RequestError extends CustomError {
constructor(message, requestUrl, code = 0) {
super(message, code);
this.requestUrl = requestUrl;
}
getPrettyMessage() {
const base = super.getPrettyMessage();
return `${base} Request URL: ${this.requestUrl}.`;
}
}