Signatur
Beschreibung
Mit new TypeError() erzeugen Sie ein Fehlerobjekt, das eine Operation mit einem Wert des falschen Typs meldet. Die JavaScript-Engine wirft solche Fehler selbst, zum Beispiel beim Aufruf von etwas, das keine Funktion ist, beim Zugriff auf Eigenschaften von null oder undefined oder beim Schreiben auf eine schreibgeschützte Eigenschaft im Strict Mode.
In eigenem Code eignet sich TypeError vor allem zur Prüfung von Argumenten: Wenn eine Funktion einen String erwartet, aber eine Zahl bekommt, ist TypeError die passende Fehlerklasse. Liegt der Wert zwar im richtigen Typ vor, aber außerhalb des erlaubten Bereichs, passt RangeError besser.
Sie können den Konstruktor mit oder ohne new aufrufen, das Ergebnis ist gleich. Das Objekt erbt von Error und hat die Eigenschaften name ("TypeError") und message. In den meisten Umgebungen gibt es außerdem stack. Seit ES2022 können Sie über options.cause die ursprüngliche Fehlerursache anhängen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $message | string | "" | Lesbare Beschreibung des Fehlers. Wird in einen String umgewandelt und in message gespeichert. |
| $options | object | Objekt mit der Eigenschaft cause, die auf die ursprüngliche Fehlerursache verweist (ES2022). |
Rückgabewert
TypeError-Objekt. Es gilt instanceof TypeError und instanceof Error.Beispiele
Argumenttyp prüfen und TypeError werfen
const formatPrice = (value) => {
if (typeof value !== 'number' || Number.isNaN(value)) {
throw new TypeError(`Erwartet wurde eine Zahl, erhalten: ${typeof value}`);
}
return `${value.toFixed(2)} €`;
};
try {
formatPrice('19.99');
} catch (err) {
console.log(err.name, '-', err.message);
console.log(err instanceof TypeError, err instanceof Error);
}
Von der Engine geworfenen TypeError abfangen
const config = null;
try {
console.log(config.apiUrl);
} catch (err) {
if (err instanceof TypeError) {
console.log('Konfiguration fehlt:', err.message);
} else {
throw err;
}
}
Ursache mit options.cause weiterreichen (ES2022)
const parseUser = (json) => {
try {
const data = JSON.parse(json);
return data.name.toUpperCase();
} catch (original) {
throw new TypeError('Ungültige Benutzerdaten', { cause: original });
}
};
try {
parseUser('{"id": 1}');
} catch (err) {
console.log(err.message);
console.log(err.cause instanceof TypeError);
}
Aufruf ohne new
const e = TypeError('ohne new erzeugt');
console.log(e instanceof TypeError, e.message);
// Wichtig · Fallstricke
- Die Fehlermeldungen der Engine sind nicht standardisiert. Der Text von
messageunterscheidet sich zwischen V8, SpiderMonkey und JavaScriptCore. Prüfen Sie deshalb mitinstanceof TypeErrorodererr.name, nie per Textvergleich. - Grenzen von
instanceof: Über Realms hinweg (z. B. iframes oder Node-vm-Kontexte) liefertinstanceoffalse. Dort isterr.name === 'TypeError'robuster. - Die richtige Fehlerklasse wählen: Falscher Typ →
TypeError. Richtiger Typ, aber ungültiger Wert →RangeError. Nicht deklarierte Variable →ReferenceError. - Die Eigenschaft
stackist nicht standardisiert. Sie wird aber von allen gängigen Browsern und Node.js unterstützt. - Unterstützung von
options.cause: Chrome 93+, Firefox 91+, Safari 15+ und Node.js 16.9+. Ältere Umgebungen ignorieren das zweite Argument. fetch()meldet Netzwerkfehler alsTypeError, zum Beispiel bei einer CORS-Blockade oder wenn keine Verbindung besteht. HTTP-Fehlerstatus wie 404 führen dagegen zu keinem Fehler.