Verwenden des optionalen Verkettungsoperators für den Zugriff auf Objekteigenschaften

Lesezeit: 3 Minuten

Benutzer-Avatar
Golo Roden

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

const value = a?.b?.c;

Das heißt, Sie können diesen Operator verwenden, um auf Eigenschaften eines Objekts zuzugreifen, wo das Objekt selbst sein kann null oder undefined. Jetzt möchte ich im Grunde dasselbe tun, aber die Eigenschaftsnamen sind dynamisch:

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

Allerdings bekomme ich dort einen Syntaxfehler:

Fehler TS1005: ‘:’ erwartet.

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

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

  • Sie verfehlen den Punkt, der Betreiber ist ?.

    – zessx

    9. November 2019 um 15:51 Uhr


  • Ja natürlich, vielen Dank 😊

    – Golo Roden

    9. November 2019 um 15:56 Uhr

  • Meine Nebenbemerkung: Typescript umfasste eine frühere ES-Spezifikation, daher würde ich die MDN-Dokumentation verlinken developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – massic80

    28. Juni um 22:46 Uhr

Benutzer-Avatar
Nikolaus Turm

Beim Zugriff auf eine Eigenschaft mit Klammernotation und optionaler Verkettung müssen Sie zusätzlich zu den Klammern einen Punkt verwenden:

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

Dies ist die Syntax, die von der übernommen wurde TC39-Vorschlagda es sonst für den Parser schwierig ist, herauszufinden, ob dies der Fall ist ? ist Teil eines ternären Ausdrucks oder Teil einer optionalen Verkettung.

So wie ich darüber denke: Das Symbol für optionale Verkettung ist es nicht ?es ist ?.. Wenn Sie eine optionale Verkettung durchführen, verwenden Sie immer beide Zeichen.

  • Ich würde ersetzen schwer mit unmöglich.

    – vol7ron

    9. November 2019 um 16:17 Uhr

  • @vol7ron warum so – ich denke es kann sich freuen :

    – EinArrayOfFunctions

    9. November 2019 um 20:40 Uhr


  • Es wäre nicht in der Lage, zu unterscheiden, insbesondere wenn es Fehler gibt.

    – vol7ron

    9. November 2019 um 20:49 Uhr

  • @AnArrayOfFunctions Wird nicht passieren. Es gibt bereits einige Stellen in der Sprache, an denen dieses Vorausschauen Probleme lösen würde. Denken Sie nur, wie die Aussage function(){}; oder {a: 1}.a; sind beide ein Syntaxfehler. Außerdem: Verschachtelte Ternäre sind bereits schwer zu analysieren (was bedeutet a?[...b][1]?c:d?.e:f bedeuten). Besser nicht durch Überladen erschweren ?.

    – Robert

    21. Juli 2020 um 5:10 Uhr


  • Wow, das ist sehr unintuitiv, da die optionale Verkettungssyntax abzüglich des “optionalen” Teils ungültig ist. Sie können keine Verkettung als ausführen a.[b].cAlso a?.[b]?.c wird nur von denen entdeckt, die auf das Problem stoßen und online suchen. Vielleicht könnte ein Vorschlag gemacht werden, um dies zu ermöglichen a.[b].c Verkettungssyntax?

    – Sprengung

    4. Juni 2021 um 13:49 Uhr

Der optionale Verkettungsoperator ist ?.

Hier sind einige Beispiele für die Handhabung von Nullable-Eigenschaften und -Funktionen.

const example = {a: ["first", {b:3}, false]}

// Properties
example?.a  // ["first", {b:3}, false]
example?.b  // undefined

// Dynamic properties ?.[]
example?.a?.[0]     // "first"
example?.a?.[1]?.a  // undefined
example?.a?.[1]?.b  // 3

// Functions ?.()
null?.()                // undefined
validFunction?.()       // result
(() => {return 1})?.()  // 1

Bonus: Standardwerte

?? (Nullish Coalescing) kann verwendet werden, um einen Standardwert festzulegen, wenn er undefiniert oder null ist.

const notNull = possiblyNull ?? defaultValue
const alsoNotNull = a?.b?.c ?? possiblyNullFallback ?? defaultValue

  • Gibt es einen Unterschied im Tun a?.b?.c ?? default vs a?.b?.c || default?

    – Nick

    29. November 2021 um 10:21 Uhr

  • || prüft auf alle falschen Werte, also '', 0 und false wird auf die Standardeinstellung gehen, wohingegen ?? wird nur standardmäßig für null und undefined

    – Gibolt

    1. Dezember 2021 um 1:34 Uhr

  • Oh ok, das ist toll zu wissen! Vielen Dank

    – Nick

    1. Dezember 2021 um 10:28 Uhr

  • Das ist der Nullish-Koaleszenzoperator developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – massic80

    28. Juni um 22:49 Uhr

1205640cookie-checkVerwenden des optionalen Verkettungsoperators für den Zugriff auf Objekteigenschaften

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy