Node.js und Fehler - wie ich meine Error-Klasse einsetze

In einem vorherigen Artikel habe ich beschrieben, warum und wie ich mir in Node.js eine Base-Error-Klasse erstellt habe. Um den Nutzen zu verdeutlichen, zeige ich dir, wie ich damit arbeite und weshalb ich mir noch zusätzlich eine wichtige Hilfsfunktion geschrieben habe.

2 Minuten

Im Artikel „Node.js und meine Base-Error-Klasse“ haben wir die BaseError-Klasse entwickelt. In freier Wildbahn setze ich die Klasse wie folgt ein:

try {
  // ... some code
} (e: unknown) {
  const error = ensureError(e)  

  // I can work with the error object here
  const detail = error.detail
}

Jeglicher Fehler im Catch ist aus Sicht von TypeScript unbekannt. Es kann eine JavaScript-Standard-Error-Klasse, eine Zeichenkette, eine Zahl, null, ein Promise oder undefined sein. Also eigentlich so ziemlich alles.

Den Code zur Prüfung von unknown habe ich in eine Funktion namens ensureError() ausgelagert. Ziel ist, ein Error-Objekt zur Hand zu haben:

import BaseError from '@/error/base/BaseError'  

export default (value: unknown): BaseError => {  
  if (value instanceof BaseError) {  
    return value  
  }  

  if (value instanceof Error) {  
    const newError = new BaseError({  
      detail: value.message,  
      cause: value.cause,  
    })  
    newError.name = value.name  
    newError.stack = value.stack  

    return newError  
  }  

  let stringified = '[Unable to stringify the thrown value]'  
  try {  
    stringified = JSON.stringify(value)  
  } catch {  
    /* empty */  
  }  

  return new BaseError({ detail: `This value was not thrown as Error, but: ${stringified}`, cause: value })  
}

Inspiriert ist der Ansatz von Kent Dodd's Artikel Get a catch block error message with TypeScript.

Was hältst du von dem Ansatz? Problematisch oder hilfreich?

Lass uns schnacken
call to action background image

Abonniere meinen Newsletter

Erhalte einmal im Monat Nachrichten aus den Bereichen Softwareentwicklung und Kommunikation gespikt mit Buch- und Linkempfehlungen.