Uso del operador de encadenamiento opcional para el acceso a la propiedad del objeto

14

TypeScript 3.7 ahora admite el operador de encadenamiento opcional . Por lo tanto, puede escribir código como:

const value = a?.b?.c;

Es decir, puede usar este operador para acceder a las propiedades de un objeto, donde el objeto en sí puede estar nullo undefined. Ahora, lo que me gustaría hacer es básicamente lo mismo, pero los nombres de las propiedades son dinámicos:

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

Sin embargo, allí recibo un error de sintaxis:

error TS1005: ':' esperado.

¿Qué estoy haciendo mal aquí? ¿Es esto posible?

PD: La propuesta parece implicar que esto no es posible 😕 (pero tal vez entiendo mal los ejemplos de sintaxis).

Golo Roden
fuente
1
Se pierde el punto, el operador es?.
zessx
Sí, por supuesto, muchas gracias 😊
Golo Roden

Respuestas:

17

Al acceder a una propiedad utilizando la notación de corchetes y el encadenamiento opcional, también debe tener un punto además de los corchetes:

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

Esta es la sintaxis que fue adoptada por la propuesta TC39 , porque de lo contrario es difícil para el analizador averiguar si esto ?es parte de una expresión ternaria o parte del encadenamiento opcional.

Nicholas Tower
fuente
1
Me sustituyo dura con imposibles .
vol7ron
@ vol7ron, ¿por qué? Creo que puede :
esperarlo
No sería capaz de distinguir, especialmente cuando hay errores.
vol7ron