Comment utiliser le chaînage facultatif dans Node.js 12

17

Le chaînage optionnel ( obj?.param1?.param2) semble être une excellente fonctionnalité et je voulais vraiment le voir implémenté et enfin se débarrasser des if imbriqués, des fonctions arbitraires et de ce qui ne l'est pas pour une opération aussi simple.

Mais il y a un problème, ça ne marche pas. J'ai mis à jour le nœud 12 et j'obtiens toujours une erreur:

var dude = res?.param?.params[0]
SyntaxError: Unexpected token '.'

ou

var dude = res.param?.params[0]
SyntaxError: Unexpected token '.'

Quel est le problème?

Dois-je changer une configuration de langue ou télécharger une bibliothèque pour activer cette fonctionnalité? Ou n'est-il simplement pas encore sorti?

almarc
la source
2
C'est dans Stage 4. Node.js ne prend pas encore en charge cela. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Sridhar
J'ai recherché 'nodejs null propagation' et au début je n'ai pas pu trouver cette question. Espérons que ce commentaire améliorera la recherche.
Casimir
J'ai bien peur de ne pas pouvoir y faire grand-chose. Il y a une balise, mais elle n'est pas liée à Javascript et causera plus de confusion que de bien faire.
almarc

Réponses:

17

Le chaînage facultatif n'est actuellement pas pris en charge dans la Node.jsversion 13 et ci-dessous, il sera pris en charge à partir de la Node.jsversion 14 et de la plupart des navigateurs lors de son déplacement vers Stage 4. Actuellement, peu de plates-formes le prennent en charge, vous pouvez trouver la liste des plates-formes prenant en charge le chaînage facultatif dans le lien donné . Vous pouvez activer l'option facultative à l'aide d'un --harmonyindicateur.

Balaj Khan
la source
10

La spécification de la fonction de chaînage facultative vient d'être promue stade 4 (terminé) le 22 décembre 2019 . Le nœud 12 est sorti avant que la spécification ne soit définitive - tout comme le nœud 13, d'ailleurs.

Selon node.green , le chaînage facultatif sera pris en charge à partir du nœud 14, mais nécessitera toujours l' --harmonyindicateur. (Cela semble entrer en conflit avec la description de Node--harmony drapeau - les fonctionnalités d'expédition du V8 ne sont pas censées nécessiter le drapeau - donc je ne sais pas quoi en faire.) Pourtant, qu'il ait besoin d'un drapeau ou non, je ne le ferais pas '' Ne vous attendez pas à voir la fonctionnalité jusqu'à la sortie de Node 14 vers avril 2020 .

Si vous voulez jouer avec le chaînage facultatif aujourd'hui, votre meilleur pari est d'utiliser TypeScript (qui a ajouté le chaînage facultatif dans la version 3.7 ) ou un préprocesseur comme Babel .

Joe White
la source
10

J'ai pu utiliser nodejs v13.7.0 avec le drapeau --harmony.

nœud --harmony myCode.js

Dinah

indéfini

indéfini

//myCode.js

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};

const catName = adventurer.cat?.name;
console.log(catName);
// expected output: Dinah
const dogName = adventurer.dog?.name;
console.log(catName);
//expected output: undefined

console.log(adventurer.someNonExistentMethod?.())
//expected output: undefined
user3283069
la source
0

Le chaînage facultatif sera mis en œuvre avec la Node.jsv14, qui sera publiée le 20/04/2020. Vous pouvez maintenant utiliser Babelavec @babel/plugin-proposal-optional-chaining.

Chema
la source