Verwenden des optionalen Verkettungsoperators für den Zugriff auf Objekteigenschaften

14

TypeScript 3.7 unterstützt jetzt den optionalen Verkettungsoperator . Daher können Sie Code schreiben wie:

const value = a?.b?.c;

Mit diesem Operator können Sie also auf Eigenschaften eines Objekts zugreifen, in denen sich das Objekt selbst befinden kann nulloder undefined. Was ich jetzt gerne machen würde, ist im Grunde dasselbe, aber die Eigenschaftsnamen sind dynamisch:

const value = a?[b]?.c;

Dort erhalte ich jedoch einen Syntaxfehler:

Fehler TS1005: ':' erwartet.

Was mache ich hier falsch? Ist das überhaupt möglich?

PS: Der Vorschlag scheint zu implizieren, dass dies nicht möglich ist 😕 (aber vielleicht verstehe ich die Syntaxbeispiele falsch).

Golo Roden
quelle
1
Sie verpassen den Punkt, der Betreiber ist?.
Zessx
Ja, natürlich vielen Dank 😊
Golo Roden

Antworten:

17

Wenn Sie mit der Klammernotation und der optionalen Verkettung auf eine Eigenschaft zugreifen, müssen Sie zusätzlich zu den Klammern einen Punkt haben:

const value = a?.[b]?.c;

Dies ist die Syntax, die vom TC39-Vorschlag übernommen wurde , da der Parser ansonsten nur schwer herausfinden kann, ob dies ?Teil eines ternären Ausdrucks oder Teil einer optionalen Verkettung ist.

Nicholas Tower
quelle
1
Ich würde hart durch unmöglich ersetzen .
Vol7ron
@ vol7ron warum so - ich denke, es kann sich freuen:
AnArrayOfFunctions
Es wäre nicht in der Lage zu unterscheiden, insbesondere wenn es Fehler gibt.
Vol7ron