Der ?.-Operator in TypeScript: Wie er funktioniert und wie er eigentlich heißt

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

Einleitung: Die Frage, die Anfänger quält

\n

Haben Sie jemals in TypeScript programmiert und einen Fehler wie Cannot read property 'name' of undefined erhalten? Ein bekanntes Problem, oder? Besonders wenn Sie mit Daten arbeiten, die vom Server kommen, oder mit tief verschachtelten Objekten. Genau in solchen Momenten stellt sich die Frage: „Gibt es in TypeScript einen Operator, der einen sicheren Zugriff auf Eigenschaften ermöglicht, ohne dass alles abstürzt?“

\n

Auf Stack Overflow hat diese Frage tausende Aufrufe gesammelt. Und die Antwort – ja, einen solchen Operator gibt es. Mehr noch, es gibt ihn auch in JavaScript (seit ES2020), und in TypeScript funktioniert er „out of the box“. Er heißt optional chaining (optionale Verkettung) und sieht aus wie das bekannte ?.. In diesem Artikel erklären wir nicht nur, wie man ihn verwendet, sondern werfen auch einen Blick unter die Haube: Wie der TypeScript-Compiler diese elegante Syntax in sicheren JavaScript-Code umwandelt.

\n\n

Wie heißt der ?.-Operator in TypeScript?

\n

Beginnen wir mit dem Wichtigsten. In der Entwickler-Community wird dieser Operator unterschiedlich genannt:

\n
    \n
  • Optional chaining (optionale Verkettung) – der offizielle Name in der ECMAScript-Spezifikation.
  • \n
  • Safe navigation operator (Operator für sicheren Zugriff) – stammt aus anderen Sprachen wie C# und Swift.
  • \n
  • Null-conditional operator – kommt in der Microsoft-Dokumentation vor.
  • \n
\n

Aber der Kern ist derselbe: ?. ermöglicht den Zugriff auf eine Eigenschaft eines Objekts, und wenn das Objekt null oder undefined ist, erhalten wir einfach undefined anstelle eines Fehlers. Das ist keine Magie, sondern nur syntaktischer Zucker, der den Code sauberer und sicherer macht.

\n\n

Grundlegende Syntax

\n

Die Syntax ist denkbar einfach. Anstatt zu schreiben:

\n
if (user && user.profile && user.profile.name) {\n    console.log(user.profile.name);\n}
\n

Schreiben Sie:

\n
console.log(user?.profile?.name);
\n

Wenn user undefined ist, wird die gesamte Kette unterbrochen und undefined in der Konsole ausgegeben. Keine Fehler, keine überflüssigen Prüfungen. Wunderbar!

\n\n

Wie es unter der Haube funktioniert: Kompilierung von TypeScript zu JavaScript

\n

TypeScript ist ein Overlay über JavaScript. Es führt Code nicht direkt aus, sondern kompiliert ihn in normales JS. Schauen wir uns also an, in was unser elegantes user?.profile?.name nach der Kompilierung umgewandelt wird.

\n\n

Beispiel: Einfaches optional chaining

\n

Quellcode in TypeScript:

\n
const name = user?.profile?.name;
\n

Nach der Kompilierung (Ziel: ES5):

\n
var name = user === null || user === void 0 ? void 0 : user.profile === null || user.profile === void 0 ? void 0 : user.profile.name;
\n

Was passiert hier? Der Compiler generiert einen ternären Operator, der jede Verschachtelungsebene auf null oder undefined prüft. Wenn der Wert null oder undefined ist, wird void 0 zurückgegeben (das ist eine zuverlässige Methode, um undefined in älteren Engines zu erhalten). Wenn nicht – geht es weiter. Im Grunde ist das derselbe „manuelle“ Code, den wir früher geschrieben haben, nur dass er jetzt von einer Maschine generiert wird.

\n\n

Beispiel: Optional chaining mit Funktionsaufruf

\n

Der ?.-Operator funktioniert nicht nur mit Eigenschaften, sondern auch mit Funktionsaufrufen. Angenommen, wir haben eine Methode getAddress, die möglicherweise nicht existiert:

\n
const address = user?.getAddress?.();
\n

Nach der Kompilierung:

\n
var address = user === null || user === void 0 ? void 0 : (typeof user.getAddress === "function" ? user.getAddress() : void 0);
\n

Beachten Sie: Der Compiler prüft nicht nur auf null, sondern stellt auch sicher, dass getAddress eine Funktion ist, bevor er sie aufruft. Wenn es keine Funktion ist, wird undef

Blogs

Buchempfehlungen