Використання необов'язкового оператора ланцюга для доступу до властивостей об'єкта


14

TypeScript 3.7 тепер підтримує додатковий оператор ланцюга . Отже, ви можете написати код, наприклад:

const value = a?.b?.c;

Тобто, ви можете використовувати цей оператор для доступу до властивостей об'єкта, де сам об'єкт може бути nullабо undefined. Тепер те, що я хотів би зробити, це в основному те саме, але назви властивостей динамічні:

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

Однак там я отримую синтаксичну помилку:

помилка TS1005: ':' очікується.

Що я тут роблю неправильно? Це навіть можливо?

PS: Здається, що пропозиція означає, що це неможливо 😕 (але, можливо, я неправильно розумію приклади синтаксису).


1
Ви пропустите точку, оператор?.
zessx

Так, звичайно, велике спасибі 😊
Голо Роден

Відповіді:


17

Отримавши доступ до ресурсу, використовуючи нотацію дужок та необов'язкове ланцюг, вам також потрібно мати крапки, крім дужок:

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

Це синтаксис, який був прийнятий пропозицією TC39 , тому що в іншому випадку парсеру важко зрозуміти, чи це ?частина потрійного виразу або частина необов'язкового ланцюжка.


1
Я б замінив важке на неможливе .
vol7ron

@ vol7ron чому так - я думаю, що це може з нетерпінням чекати:
AnArrayOfFunctions

Її не вдалося б розрізнити, особливо коли є помилки.
vol7ron
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.