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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.