Cómo usar el encadenamiento opcional en Node.js 12

17

El encadenamiento opcional ( obj?.param1?.param2) parece ser una gran característica y realmente quería verlo implementado y finalmente deshacerme de los if anidados, las funciones arbitrarias y lo que no es para una operación tan simple.

Pero hay un problema, no funciona. Actualicé al Nodo 12 y sigo recibiendo un error:

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

o

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

¿Cuál es el problema?

¿Necesito cambiar alguna configuración de idioma o descargar una biblioteca para habilitar esta función? ¿O simplemente no ha salido todavía?

almarc
fuente
2
Está adentro Stage 4. Node.js aún no admite esto. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Sridhar
Busqué 'propagación nula de nodejs' e inicialmente no pude encontrar esta pregunta. Esperemos que este comentario mejore la capacidad de búsqueda.
Casimir
Me temo que no puedo hacer mucho al respecto. Hay una etiqueta para ello, pero no está relacionada con Javascript y causará más confusión que bien.
almarc

Respuestas:

17

El encadenamiento opcional no se admite actualmente en la Node.jsversión 13 y, a continuación, se admitirá desde la Node.jsversión 14 y la mayoría de los navegadores a medida que se mueve Stage 4. Actualmente, pocas plataformas lo admiten. Puede encontrar la lista de plataformas que admiten el encadenamiento opcional en el enlace dado . Puede habilitar opcional usando la --harmonybandera.

Balaj Khan
fuente
10

La especificación para la función de encadenamiento opcional acaba de ser promovida a la Etapa 4 (Finalizada) el 22 de diciembre de 2019 . El nodo 12 salió antes de que la especificación fuera final, y también el nodo 13, para el caso.

De acuerdo con node.green , se admitirá el encadenamiento opcional a partir del Nodo 14, pero aún requerirá la --harmonybandera. (Esto parece estar en conflicto con la descripción de Node de la --harmonybandera ; se supone que las características de envío de V8 no requieren la bandera, así que no estoy seguro de qué hacer con eso). Sin embargo, si necesita una bandera o no, no lo haría. No espere ver la función hasta el lanzamiento del Nodo 14 alrededor de abril de 2020 .

Si quieres jugar con el encadenamiento opcional hoy, tu mejor opción es usar TypeScript (que agregó el encadenamiento opcional en la versión 3.7 ) o un preprocesador como Babel .

Joe White
fuente
10

Pude usar nodejs v13.7.0 con --harmony flag.

nodo --harmony myCode.js

Dinah

indefinido

indefinido

//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
usuario3283069
fuente