Utilizando o Operador de Encadeamento Opcional para Acesso à Propriedade do Objeto


14

O TypeScript 3.7 agora suporta o operador de encadeamento opcional . Portanto, você pode escrever código como:

const value = a?.b?.c;

Ou seja, você pode usar esse operador para acessar propriedades de um objeto, onde o próprio objeto pode estar nullou undefined. Agora, o que eu gostaria de fazer é basicamente o mesmo, mas os nomes das propriedades são dinâmicos:

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

No entanto, recebo um erro de sintaxe:

erro TS1005: ':' esperado.

O que eu estou fazendo errado aqui? Isso é possível?

PS: A proposta parece sugerir que isso não é possível 😕 (mas talvez eu entenda errado os exemplos de sintaxe).


11
Você perder o ponto, o operador é?.
zessx

Sim, é claro, muito obrigado 😊
Golo Roden

Respostas:


17

Ao acessar uma propriedade usando a notação entre colchetes e o encadeamento opcional, você também precisa ter um ponto além dos colchetes:

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

Essa é a sintaxe adotada pela proposta do TC39 , porque, caso contrário, é difícil para o analisador descobrir se isso ?faz parte de uma expressão ternária ou parte do encadeamento opcional.


11
Eu substituiria difícil por impossível .
vol7ron

@ vol7ron por isso - eu acho que ele pode olhar para a frente para:
AnArrayOfFunctions

Não seria capaz de distinguir, especialmente quando há erros.
vol7ron
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.