
Typecheck
Ein Typecheck ist die automatische Prüfung, ob in einem Programm überall die richtige Art von Daten verwendet wird – also etwa eine Zahl dort steht, wo eine Zahl erwartet wird. Er findet viele Fehler, bevor das Programm überhaupt läuft.
Programme arbeiten mit sehr verschiedenen Arten von Daten. Es gibt ganze Zahlen, Kommazahlen, Texte, Wahrheitswerte und komplexere Gebilde wie Listen. Diese Arten nennt man Datentypen, kurz Typen. Ein Typecheck ist die Prüfung, ob jeder Baustein eines Programms den Typ bekommt, mit dem er umgehen kann. Wenn eine Rechenanweisung zwei Zahlen erwartet, aber ein Wort geliefert bekommt, schlägt die Prüfung Alarm. Diese Kontrolle übernimmt kein Mensch, sondern ein Hilfsprogramm, das den Quelltext liest.
Fehler finden, bevor der Nutzer sie sieht
Der große Vorteil liegt im Zeitpunkt. Viele Typechecks laufen, bevor das Programm gestartet wird. Der Fehler taucht also auf dem Bildschirm der Entwicklerin auf, nicht später beim Kunden. Ein Fehler, der zehn Sekunden nach dem Tippen entdeckt wird, kostet fast nichts. Derselbe Fehler in einer Banking-App kann Tausende Nutzer treffen.
Dazu kommt ein zweiter Nutzen, der oft unterschätzt wird. Typen sind eine Art Beschriftung am Code. Wer eine fremde Funktion benutzt, sieht sofort, was sie erwartet und was sie zurückgibt. Das ist Dokumentation, die nicht veralten kann, weil die Prüfung sie ständig kontrolliert.
Wichtig ist aber die Abgrenzung: Ein Typecheck prüft nur die Art der Daten, nicht deren Sinn. Eine Funktion, die das Alter berechnet und statt 15 die Zahl 1500 liefert, besteht die Prüfung mühelos. Beide Werte sind ganze Zahlen. Gegen inhaltlich falsche Logik hilft nur Testen und Nachdenken.
Statisch, dynamisch und die Sache mit den Annotationen
Man unterscheidet zwei Zeitpunkte. Ein statischer Typecheck geschieht vor dem Ausführen, meist während des Übersetzens des Quelltextes in Maschinensprache. Sprachen wie Java, C# oder Rust arbeiten so. Ein dynamischer Typecheck passiert erst währenddessen: Das Programm merkt in dem Moment, in dem es rechnen will, dass der Wert nicht passt, und bricht ab. Python und JavaScript funktionieren traditionell auf diese Weise.
Damit die statische Prüfung möglich ist, muss der Prüfer wissen, welcher Typ wo erwartet wird. Diese Angaben heißen Typannotationen und stehen direkt im Quelltext. Sie sehen etwa so aus: Diese Variable ist eine ganze Zahl, jene Funktion gibt einen Text zurück. Moderne Prüfprogramme leiten viele Typen auch selbst ab, das nennt man Typinferenz. Man muss also nicht jede Kleinigkeit von Hand hinschreiben.
Ein hilfreicher Vergleich ist die Passkontrolle am Flughafen. Der statische Check ist die Kontrolle vor dem Einsteigen: Wer nicht ins Schema passt, kommt gar nicht an Bord. Der dynamische Check wäre eine Kontrolle mitten im Flug – funktioniert auch, aber die Umkehr ist deutlich unangenehmer.
Typechecks in Editoren, Pipelines und KI-Werkzeugen
Am sichtbarsten ist die Prüfung in Programmier-Editoren wie Visual Studio Code. Die roten Wellenlinien unter fehlerhaftem Code stammen häufig von einem Typechecker, der im Hintergrund mitläuft. Bekannte Werkzeuge sind TypeScript für JavaScript sowie mypy und Pyright für Python. TypeScript ist in den letzten Jahren zu einem Standard in der Webentwicklung geworden.
In Firmen läuft der Typecheck zusätzlich automatisch, sobald jemand Code einreicht. Diese automatische Kette aus Prüfen, Testen und Ausliefern nennt man CI-Pipeline. Besteht der Code die Typprüfung nicht, wird er gar nicht erst übernommen. So verhindert man, dass ein einzelner Flüchtigkeitsfehler in ein Produkt gelangt, das Millionen Menschen nutzen.
Auch bei KI-Programmierassistenten spielt das eine wachsende Rolle. Solche Systeme schreiben Code, der plausibel aussieht, aber nicht immer zusammenpasst. Ein Typecheck ist dann eine schnelle, harte Kontrollinstanz: Er urteilt nicht über den Stil, sondern stellt nur fest, ob die Teile überhaupt zueinander passen. Genau deshalb bauen viele Entwicklungsumgebungen diese Prüfung inzwischen direkt in die Rückmeldung an das KI-Modell ein.