Top Fehler von TypeScript-Anfängern: Fortgeschrittenes Niveau

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Top Fehler von TypeScript-Anfängern: Fortgeschrittenes Niveau



TypeScript ist ein leistungsstarkes Werkzeug, das hilft, sichereren und vorhersagbareren Code zu schreiben. Der Wechsel von JavaScript zu TypeScript, insbesondere auf fortgeschrittenem Niveau, ist jedoch oft von spezifischen Fehlern begleitet. Selbst Entwickler, die mit den Grundlagen der Typisierung vertraut sind, machen typische Fehler bei der Arbeit mit Generics, bedingten Typen und Überladungen. In diesem Artikel analysieren wir die 4 häufigsten Fehler fortgeschrittener Anfänger und zeigen, wie man sie behebt.



1. Falsche Verwendung von Generics: Verlust von Typinformationen



Einer der häufigsten Fehler ist eine zu breite oder im Gegenteil zu enge Deklaration von Generics. Entwickler geben oft den Typ any innerhalb einer Generic-Funktion an und machen damit die Vorteile von TypeScript vollständig zunichte.



Problem

// Schlecht: Die Funktion gibt any zurück, Typisierung geht verlorenfunction getProperty(obj: any, key: string): any {    return obj[key];}

const user = { name: 'Alice', age: 30 };const value = getProperty(user, 'name'); // value: any


Lösung

// Gut: Verwendung von Generics zur Typenerhaltungfunction getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {    return obj[key];}

const user = { name: 'Alice', age: 30 };const value = getProperty(user, 'name'); // value: string


Wichtig: Verwenden Sie immer extends-Einschränkungen für Generics. Dies erhält nicht nur die Typen, sondern bietet auch Autovervollständigung in der IDE.



2. Missbrauch des Typs any anstelle von unknown



Viele Anfänger setzen any überall dort ein, wo sie den Typ nicht sofort bestimmen können. Das zerstört den gesamten Nutzen von TypeScript. Der richtige Ansatz ist die Verwendung von unknown und die anschließende Eingrenzung des Typs.



Problem

// Schlecht: any erlaubt allesfunction parseData(data: any): void {    console.log(data.toUpperCase()); // Laufzeitfehler, wenn data eine Zahl ist    data.someMethod(); // Keine Überprüfung}


Lösung

// Gut: unknown erfordert eine Überprüfungfunction parseData(data: unknown): void {    if (typeof data === 'string') {        console.log(data.toUpperCase()); // Sicher    } else if (Array.isArray(data)) {        console.log(data.length);    } else {        console.log('Unbekannter Datentyp');    }}


Verwenden Sie any nur in Ausnahmefällen (Migration von JS oder Arbeit mit dynamischen APIs). Für alles andere verwenden Sie unknown mit Type Guards.



3. Fehler bei Funktionsüberladungen (Function Overloads)



Funktionsüberladungen in TypeScript sind ein mächtiger, aber tückischer Mechanismus. Ein typischer Fehler: falsche Reihenfolge der Signaturen oder Inkonsistenz der Implementierung mit den deklarierten Überladungen.



Problem

// Schlecht: Signaturen widersprechen sichfunction process(value: string): string;function process(value: number): number;function process(value: string | number): string | number {    // Implementierung berücksichtigt nicht alle Fälle    return value.toString(); // Gibt string zurück, obwohl number für number versprochen wurde}


Lösung

// Gut: Klare Trennung der Logikfunction process(value: string): string;function process(value: number): number;function process(value: string | number): string | number {    if (typeof value === 'string') {        return value.toUpperCase(); // Gibt string zurück    } else {        return value * 2; // Gibt number zurück    }}

const result1 = process('hello'); // stringconst result2 = process(10); // number


Tipp: Überprüfen Sie immer, ob die Funktionsimplementierung alle in den Signaturen deklarierten Varianten abdeckt. Verwenden Sie typeof oder benutzerdefinierte Type Guards.



4. Ignorieren der strikten Modi der Kompilierung



Viele Anfänger deaktivieren die strikten TypeScript-Kompilierungsoptionen (strict: true in der tsconfig.json), um Fehler zu vermeiden. Dies ist ein großer Fehler, da die strikten Modi helfen, potenzielle Probleme frühzeitig zu erkennen.



Problem

// Ohne strikte Modi: null/undefined sind erlaubtfunction greet(name: string) {    console.log('Hallo, ' + name.toUpperCase()); // Laufzeitfehler, wenn name null ist}

greet(null); // Kein Kompilierungsfehler


Lösung

// Mit strikten Modi: null/undefined werden überprüftfunction greet(name: string) {    console.log('Hallo, ' + name.toUpperCase()); // Kompilierungsfehler, wenn name null sein kann}

greet(null); // Fehler: Argument vom Typ 'null' ist nicht zuweisbar an Parameter vom Typ 'string'


Empfehlung: Aktivieren Sie immer strict: true in der tsconfig.json. Dies schließt strictNullChecks, noImplicitAny und andere nützliche Optionen ein, die die Codequalität erheblich verbessern.

Blogs

Buchempfehlungen