Como usar o encadeamento opcional no Node.js 12

17

O encadeamento opcional ( obj?.param1?.param2) parece ser um ótimo recurso e eu realmente queria vê-lo implementado e, finalmente, livrar-se de ifs aninhados, funções arbitrárias e o que não é uma operação tão simples.

Mas há um problema, não funciona. Atualizei para o nó 12 e ainda recebo um erro:

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

ou

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

Qual é o problema?

Preciso alterar alguma configuração de idioma ou baixar uma biblioteca para ativar esse recurso? Ou simplesmente não saiu ainda?

almarc
fonte
2
É no Stage 4. O Node.js ainda não suporta isso. developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…
Sridhar em
Eu procurei por 'nodejs null propagation' e inicialmente não consegui encontrar esta pergunta. Esperemos que este comentário melhore a capacidade de pesquisa.
Casimir
Receio não poder fazer muito a respeito. Existe uma marca para isso, mas não está relacionada ao Javascript e causará mais confusão do que o bem.
almarc 7/04

Respostas:

17

No momento, o encadeamento opcional não é suportado na Node.jsversão 13 e, abaixo, será suportado na Node.jsversão 14 e na maioria dos navegadores à medida que é movido Stage 4. Atualmente, poucas plataformas o suportam. Você pode encontrar a lista de plataformas que suportam encadeamento opcional no link fornecido . Você pode ativar opcional usando o --harmonysinalizador.

Balaj Khan
fonte
10

As especificações para o recurso de encadeamento opcional foram promovidas para o Estágio 4 (Concluído) em 22 de dezembro de 2019 . O nó 12 saiu antes da especificação final - e o nó 13 também.

De acordo com node.green , o encadeamento opcional será suportado a partir do Nó 14, mas ainda exigirá o --harmonysinalizador. (Isso parece estar em conflito com a descrição da --harmonybandeira do Node - os recursos de remessa do V8 não devem exigir a bandeira - então não tenho certeza do que fazer com isso.) Ainda assim, se precisa ou não de uma bandeira, eu não faria ' esperamos ver o recurso até o lançamento do Nó 14, por volta de abril de 2020 .

Se você deseja jogar com encadeamento opcional hoje, sua melhor aposta é usar o TypeScript (que adicionou encadeamento opcional na versão 3.7 ) ou um pré-processador como o Babel .

Joe White
fonte
10

Consegui usar o nodejs v13.7.0 com o sinalizador --harmony.

nó --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
user3283069
fonte
0

O encadeamento opcional será implementado com a Node.jsv14, que será lançada em 20/04/2020. Até agora, você pode usar Babelcom @babel/plugin-proposal-optional-chaining.

Chema
fonte