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).

Golo Roden
fonte
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.

Nicholas Tower
fonte
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