Использование необязательного оператора цепочки для доступа к свойству объекта

14

TypeScript 3.7 теперь поддерживает опциональный оператор цепочки . Следовательно, вы можете написать такой код:

const value = a?.b?.c;

Т.е. вы можете использовать этот оператор для доступа к свойствам объекта, где сам объект может находиться nullили undefined. Теперь я хотел бы сделать то же самое, но имена свойств являются динамическими:

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

Тем не менее, там я получаю синтаксическую ошибку:

ошибка TS1005: ':' ожидается.

Что я здесь не так делаю? Это вообще возможно?

PS: предложение, кажется, подразумевает, что это невозможно but (но, возможно, я неправильно понимаю примеры синтаксиса).

Голо Роден
источник
1
Вы упускаете суть, оператор?.
zessx
Да, конечно, большое спасибо G
Голо Роден

Ответы:

17

При доступе к свойству с использованием скобочных обозначений и необязательных цепочек, вам также необходимо иметь точку в дополнение к скобкам:

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

Это синтаксис, принятый предложением TC39 , потому что в противном случае синтаксическому анализатору будет сложно определить, является ли это ?частью троичного выражения или частью необязательного сцепления.

Николаевская башня
источник
1
Я бы заменил трудно на невозможное .
Vol7ron
@ vol7ron, почему так - я думаю, что это может с нетерпением ждать:
AnArrayOfFunctions
Он не сможет отличить, особенно когда есть ошибки.
Vol7ron