Расширяйте Error
Когда вызывающему важно отличить доменный сбой и прочитать структурированный контекст:
class ValidationError extends Error {
constructor(message, { field, cause } = {}) {
super(message, { cause });
this.name = "ValidationError";
this.code = "INVALID_INPUT";
this.field = field;
}
}
try {
throw new ValidationError("Email is invalid", { field: "email" });
} catch (error) {
if (error instanceof ValidationError) {
console.log(error.field);
} else {
throw error;
}
}
Сохраняйте исходную ошибку через стандартный cause, не затирайте диагностику.
Итог: custom Error = name + стабильный code + контекст + cause; ловите через instanceof.