TypeScript verfügt über ein leistungsfähiges System zur Typableitung. In den meisten Fällen werden die Typen von Variablen, Parametern und Rückgabewerten automatisch anhand des Kontexts ermittelt. Es gibt mehrere Ebenen der Typableitung:
Beispiele:
let a = 2; // number let b = [1, "a"]; // (number | string)[] window.addEventListener('click', e => { // e: MouseEvent });
Einschränkung: Wenn der Compiler den Typ nicht eindeutig ableiten kann, wählt er den allgemeinsten (in der Regel any), was die Vorteile der Typisierung mindert.
Wird der Typ des Funktionsarguments abgeleitet, wenn er nicht explizit angegeben ist, die Funktion jedoch später mit einem typisierten Wert verwendet wird?
Falsche Antwort: Ja, TypeScript "errät" immer automatisch den Typ des Arguments.
Richtige Antwort: Nein. Nur wenn der Kontext der Funktion Informationen über den Typ enthält, erhält das Argument den Typ. Andernfalls wird es any oder einen anderen Basistyp haben, was zu Fehlern führen kann. Es ist immer sinnvoll, die Eingabedaten explizit zu typisieren.
Beispiel:
function f(x) { return x.toFixed(2); // Fehler: x ist vom Typ any }
Geschichte
Im Projekt wurde der Rückgabewert eines benutzerdefinierten React-Hooks nicht explizit typisiert, und TypeScript erkannte nicht, dass der Typ
undefinedsein könnte. Dies führte dazu, dass Methodenaufrufe ohne Überprüfung zu Laufzeitfehlern führten.
Geschichte
Bei der Erstellung eines Arrays mit Werten unterschiedlicher Typen wurde der endgültige Typ automatisch als
any[]abgeleitet, da kein Typ explizit angegeben wurde, was zum Verlust aller Vorteile der Typisierung im folgenden Code führte.
Geschichte
Die Validierung der Eingabeparameter des Dienstes war nicht typisiert und basierte auf der "Vermutung" von TypeScript. Nach der Refaktorisierung des Codebases ergab die automatische Ableitung einen zu allgemeinen Typ, und Typfehler gelangten in die Produktion.