Praxis
TypeScript Compiler-Fehler verstehen und lösen
Die häufigsten TypeScript-Fehlermeldungen erklärt: Was sie bedeuten, warum sie auftreten und wie du sie schnell behebst.
Inhalt
TypeScript Compiler-Fehler verstehen und lösen
TypeScript-Fehlermeldungen sind präzise, aber manchmal kryptisch. Wer lernt, sie zu lesen und die häufigsten Muster zu erkennen, debuggt deutlich schneller. Dieser Ratgeber geht die wichtigsten Fehlerkategorien durch und zeigt konkrete Lösungswege.
Type X is not assignable to type Y
Der häufigste Fehler. TypeScript erwartet einen bestimmten Typ, bekommt aber einen anderen.
function zeigeAlter(alter: number) {
console.log(`Alter: ${alter}`);
}
// Fehler: Argument of type 'string' is not assignable to parameter of type 'number'.
zeigeAlter("25");
// Korrekt
zeigeAlter(25);
zeigeAlter(parseInt("25", 10));
Häufige Ursache: Du passt den Typen der Variablen nicht an den Typen der Funktion an. Lösung: Entweder konvertierst du den Wert, oder du erweiterst den Funktionsparameter um den zweiten Typen.
Object is possibly null / undefined
Dieser Fehler tritt auf, wenn strictNullChecks aktiv ist und du auf ein Objekt zugreifst, das null oder undefined sein könnte.
function findeElement(id: string): HTMLElement | null {
return document.getElementById(id);
}
const element = findeElement("hauptinhalt");
// Fehler: Object is possibly 'null'.
element.textContent = "Hallo";
// Lösung 1: Explizite Prüfung
if (element !== null) {
element.textContent = "Hallo";
}
// Lösung 2: Optional Chaining
element?.setAttribute("aria-hidden", "true");
// Lösung 3: Non-Null Assertion (nur wenn sicher)
element!.textContent = "Hallo";
Property X does not exist on type Y
TypeScript findet das angesprochene Property nicht in der Typdefinition.
interface Produkt {
id: number;
name: string;
}
const produkt: Produkt = { id: 1, name: "Laptop" };
// Fehler: Property 'preis' does not exist on type 'Produkt'.
console.log(produkt.preis);
Ursachen und Lösungen:
// Ursache 1: Property fehlt im Interface
interface ProduktMitPreis {
id: number;
name: string;
preis: number;
}
// Ursache 2: Tippfehler im Property-Namen
console.log(produkt.name); // statt 'naem'
// Ursache 3: Falsches Interface verwendet
// Prüfe, ob du wirklich das richtige Interface importiert hast
Type X has no properties in common with type Y
Dieser Fehler erscheint häufig bei Object Literals, wenn TypeScript sieht, dass du Felder übergibst, die im Typen nicht existieren.
interface Konfiguration {
host: string;
port: number;
}
// Fehler: Object literal may only specify known properties,
// and 'debug' does not exist in type 'Konfiguration'.
const config: Konfiguration = {
host: "localhost",
port: 3000,
debug: true,
};
// Lösung 1: Feld aus dem Literal entfernen
const config2: Konfiguration = {
host: "localhost",
port: 3000,
};
// Lösung 2: Feld zum Interface hinzufügen
interface KonfigurationMitDebug {
host: string;
port: number;
debug?: boolean;
}
Argument of type X is not assignable to parameter of type never
Dieser Fehler taucht oft in switch-Statements auf, wenn TypeScript einen Fall als nicht erreichbar betrachtet.
type Aktion = "starten" | "stoppen";
function verarbeiteAktion(aktion: Aktion) {
switch (aktion) {
case "starten":
console.log("Gestartet");
break;
case "stoppen":
console.log("Gestoppt");
break;
default:
// Hier: aktion hat Typ 'never'
// TypeScript weiß, dass alle Fälle abgedeckt sind
const unerreichbar: never = aktion;
throw new Error(`Unbekannte Aktion: ${unerreichbar}`);
}
}
Das ist tatsächlich ein nützliches Muster: Wenn du dem Union Type einen neuen Wert hinzufügst, aber vergisst, den switch zu erweitern, meldet TypeScript einen Fehler beim never-Check.
Cannot find module X or its corresponding type declarations
TypeScript findet die Typdefinitionen für ein Modul nicht.
// Fehler: Could not find a declaration file for module 'lodash'.
import _ from "lodash";
Lösung: Installiere die Typdefinitionen aus @types.
// Im Terminal ausführen:
// npm install --save-dev @types/lodash
// Dann funktioniert der Import
import _ from "lodash";
Für Bibliotheken ohne @types-Paket kannst du eine minimale Deklarationsdatei erstellen:
// types/lodash.d.ts
declare module "lodash";
Type X is not assignable to type Y: Types of property Z are incompatible
Dieser Fehler tritt bei verschachtelten Typen auf, wenn ein einzelnes Feld nicht passt.
interface Tierhalter {
name: string;
tier: {
art: "hund" | "katze";
name: string;
};
}
const halter: Tierhalter = {
name: "Maria",
tier: {
art: "hamster", // Fehler: "hamster" ist nicht in "hund" | "katze"
name: "Flauschig",
},
};
TypeScript zeigt genau, welches Feld in welchem Unter-Objekt nicht stimmt.
Im Playground Fehler reproduzieren
Das Playground ist der schnellste Weg, einen Fehler zu isolieren. Kopiere den problematischen Code, füge ihn ein, und TypeScript zeigt dir sofort alle Fehler mit genauen Positionen. Oft reicht es schon, den minimalen Code zu schreiben, der den Fehler reproduziert, um die Ursache zu verstehen.
Fazit
TypeScript-Fehlermeldungen sind präzise und hilfreich, wenn du weißt, wie du sie liest. Der Typ in der Fehlermeldung zeigt immer, was TypeScript erwartet und was es bekommen hat. Diese beiden Informationen zusammen führen in den meisten Fällen direkt zur Lösung.
Häufige Fragen
Was bedeutet 'Object is possibly undefined' und wie behebe ich es?
TypeScript weiß, dass ein Wert undefined sein kann, du aber direkt darauf zugreifst. Lösung: Prüfe mit einer if-Bedingung, ob der Wert existiert, oder verwende Optional Chaining mit dem ?.-Operator.
Warum bekomme ich 'Property X does not exist on type Y', obwohl das Property existiert?
Meistens liegt es daran, dass der Typ zu allgemein definiert ist (z.B. 'object' statt ein spezifisches Interface). Prüfe, ob du das richtige Interface verwendest, und ob Tippfehler im Property-Namen vorliegen.
Quellen
- TypeScript Error Reference (typescriptlang.org/tsconfig)
Über die Autorenschaft
Mateusz Viola
Betreiber und redaktionelle Verantwortung typescript-playground.de
Themengebiet: Mathematik, Kalenderrechnung, Schaltjahre, Statistik und ISO 8601
Mehr über Mateusz Viola →Verwandte Artikel
Grundlagen
Was ist TypeScript? Eine Einführung in die typisierte JavaScript-Erweiterung
TypeScript erweitert JavaScript um statische Typen und macht große Codebases wartbarer. Lerne die Grundlagen, die Geschichte und die wichtigsten Vorteile von TypeScript.
Lesezeit 7 Min.
Grundlagen
TypeScript vs. JavaScript: Die wichtigsten Unterschiede im Überblick
TypeScript und JavaScript unterscheiden sich grundlegend in der Typprüfung, Werkzeugunterstützung und Wartbarkeit. Dieser Ratgeber erklärt die Unterschiede und hilft bei der Wahl der richtigen Sprache.
Lesezeit 8 Min.
Typen
TypeScript Typen Grundlagen: string, number, boolean und mehr
Die primitiven Typen string, number und boolean sind das Fundament von TypeScript. Dieser Ratgeber erklärt alle grundlegenden Typen mit praktischen Beispielen.
Lesezeit 9 Min.