web-dev-qa-db-fra.com

TypeError: ne peut pas correspondre à 'undefined' ou 'null'

Code

client.createPet(pet, (err, {name, breed, age}) => {
  if (err) {
    return t.error(err, 'no error')
  }
  t.equal(pet, {name, breed, age}, 'should be equivalent')
})

Erreur

client.createPet(pet, (err, {name, breed, age}) => {
                        ^

TypeError: Cannot match against 'undefined' or 'null'.

Pourquoi est-ce que je reçois cette erreur? Ma connaissance de ES6 m'a amené à présumer que cette erreur ne devrait se produire que si le tableau ou l'objet à déstructurer ou ses enfants est undefined ou null.

Je n'étais pas au courant que les paramètres de fonction sont utilisés comme une correspondance. Et s’ils le sont, pourquoi s’agit-il seulement d’une erreur si j’essaie de déstructurer l’un d’eux? (ce n'est pas undefined ou null).

45

cette erreur ne devrait se produire que si le tableau ou l'objet en cours de déstructuration ou ses enfants est undefined ou null.

Exactement. Dans votre cas, l'objet à déstructurer est soit undefined ou null. Par exemple,

function test(err, {a, b, c}) {
  console.log(err, a, b, c);
}

test(1, {a: 2, b: 3, c: 4});
// 1 2 3 4
test(1, {});
// 1 undefined undefined undefined
test(1);
// TypeError: Cannot match against 'undefined' or 'null'.
69
thefourtheye