Utilisation de l'opérateur de chaînage facultatif pour l'accès aux propriétés des objets

14

TypeScript 3.7 prend désormais en charge l' opérateur de chaînage facultatif . Par conséquent, vous pouvez écrire du code tel que:

const value = a?.b?.c;

C'est-à-dire que vous pouvez utiliser cet opérateur pour accéder aux propriétés d'un objet, où l'objet lui-même peut être nullou undefined. Maintenant, ce que je voudrais faire est fondamentalement le même, mais les noms de propriété sont dynamiques:

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

Cependant, là, j'obtiens une erreur de syntaxe:

erreur TS1005: ':' attendue.

Qu'est-ce que je fais mal ici? Est-ce seulement possible?

PS: La proposition semble impliquer que ce n'est pas possible 😕 (mais je me trompe peut-être sur les exemples de syntaxe).

Golo Roden
la source
1
Vous manquez le point, l'opérateur est?.
zessx
Oui, bien sûr, merci beaucoup 😊
Golo Roden

Réponses:

17

Lorsque vous accédez à une propriété à l'aide de la notation entre crochets et du chaînage facultatif, vous devez également avoir un point en plus des crochets:

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

C'est la syntaxe qui a été adoptée par la proposition TC39 , car sinon, il est difficile pour l'analyseur syntaxique de savoir si cela ?fait partie d'une expression ternaire ou d'une partie de chaînage facultatif.

Tour Nicolas
la source
1
Je remplacerais dur par impossible .
vol7ron
@ vol7ron pourquoi - je pense qu'il peut attendre avec impatience:
AnArrayOfFunctions
Il ne serait pas en mesure de distinguer, surtout lorsqu'il y a des erreurs.
vol7ron