🏛️Funktionen & Klassen
Wie man Funktionen und Klassen typisiert – und was davon im JavaScript übrig bleibt. Alle Typen und Ausgaben kommen live vom Compiler.
ƒFunktionstypen
plus braucht keine eigenen Annotationen.- Zeile 2
a:… - Zeile 3
mal:… - Zeile 3
trenner:… - Zeile 9
ergebnis:…
🔀Overloads
- Zeile 6
eins:… - Zeile 7
viele:…
🏛️Klassen und Zugriffsmodifikatoren
Die Modifikatoren prüft nur der Compiler (zwei Fehler in der letzten Zeile). Im JavaScript stehen alle drei Felder ganz normal – private schützt zur Laufzeit nicht.
🔢Enums vs. Union von Literalen
Ein numerisches enum erzeugt ein echtes Objekt – sogar mit Rückwärts-Zuordnung (Richtung[0] === "Hoch"). Das ist Laufzeit-Code, den Node.js' Type Stripping nicht kann.
const enum wird beim Kompilieren eingesetzt (1 /* Richtung.Runter */) – kein Objekt zur Laufzeit. Funktioniert aber nicht mit Werkzeugen, die Dateien einzeln übersetzen (isolatedModules).
Der Typ verschwindet vollständig. Werte sind lesbare Strings, Tippfehler meldet der Compiler trotzdem. In modernem TypeScript meist die erste Wahl.
Wer ein Laufzeit-Objekt und einen Typ möchte: as const + abgeleiteter Typ. Nur „löschbare“ Syntax – funktioniert mit erasableSyntaxOnly.
✅satisfies, Annotation oder as?
config.port.: Konfigport: …Die Variable ist jetzt eine Konfig: Geprüft wird zwar, aber das Wissen über die konkreten Werte geht verloren – port ist nur noch string | number.
satisfies Konfigport: …Geprüft wird gegen Konfig, aber der Wert behält seinen eigenen, genauen Typ: port ist number. Das Beste aus beiden Welten (seit TypeScript 4.9).
as Konfigport: …as ist eine Behauptung, keine Prüfung: Der Compiler glaubt uns, obwohl port fehlt. Zur Laufzeit ist port hier undefined – der Typ sagt etwas anderes.
satisfies mit Fehlerport: …satisfies meldet den falschen Wert sofort – true ist weder string noch number.
🧊as const
as const macht aus Literalen die engsten Typen: Strings bleiben Literal-Typen, Arrays werden zu schreibgeschützten Tupeln, Objekte zu readonly. Ideal, um aus Daten Typen abzuleiten.