typescript / intermediate
Snippet
Erstellen benutzerdefinierter Fehlerklassen mit wiederhergestellter Prototypenkette
Beim Erweitern von integrierten Klassen wie Error in TypeScript kann der kompilierte ES5-Code die Prototypenkette unterbrechen, wodurch instanceof-Prüfungen fehlschlagen. Das explizite Aufrufen von Object.setPrototypeOf stellt die korrekte Instanzverknüpfung wieder her.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class ValidationError extends Error {public readonly code: string;constructor(message: string, code: string) {super(message);this.code = code;this.name = 'ValidationError';Object.setPrototypeOf(this, ValidationError.prototype);}}try {throw new ValidationError('Invalid email format', 'ERR_INVALID_EMAIL');} catch (err) {if (err instanceof ValidationError) {console.log(`[${err.code}] ${err.message}`);}}
Erklärung
1
class ValidationError extends Error {
Definiert eine benutzerdefinierte Fehlerklasse, die von der Standard-JavaScript-Klasse Error erbt.
2
Object.setPrototypeOf(this, ValidationError.prototype);
Koppelt die Prototypenkette explizit neu, damit instanceof-Prüfungen über ES-Zielversionen hinweg funktionieren.
3
if (err instanceof ValidationError) {
Überprüft sicher, ob die abgefangene Ausnahme speziell eine ValidationError-Instanz ist.