patternjavascriptCritical
Using optional chaining operator for object property access
Viewed 0 times
propertyobjectaccessforusingoptionalchainingoperator
Problem
TypeScript 3.7 now supports the optional chaining operator. Hence, you can write code such as:
I.e., you can use this operator to access properties of an object, where the object itself may be
However, there I get a syntax error:
error TS1005: ':' expected.
What am I doing wrong here? Is this even possible?
The proposal seems to imply that this is not possible (but maybe I get the syntax examples wrong).
const value = a?.b?.c;I.e., you can use this operator to access properties of an object, where the object itself may be
null or undefined. Now what I would like to do is basically the same, but the property names are dynamic:const value = a?[b]?.c;However, there I get a syntax error:
error TS1005: ':' expected.
What am I doing wrong here? Is this even possible?
The proposal seems to imply that this is not possible (but maybe I get the syntax examples wrong).
Solution
When accessing a property using bracket notation and optional chaining, you need to use a dot in addition to the brackets:
This is the syntax that was adopted by the TC39 proposal, because otherwise it's hard for the parser to figure out if this
The way I think about it: the symbol for optional chaining isn't
const value = a?.[b]?.c;This is the syntax that was adopted by the TC39 proposal, because otherwise it's hard for the parser to figure out if this
? is part of a ternary expression or part of optional chaining.The way I think about it: the symbol for optional chaining isn't
?, it's ?.. If you're doing optional chaining, you'll always be using both characters.Code Snippets
const value = a?.[b]?.c;Context
Stack Overflow Q#58780817, score: 329
Revisions (0)
No revisions yet.