O que é o erro TypeError: Cannot destructure property 'X' of undefined e como resolvê-lo?

O erro 'Cannot destructure property 'X' of undefined' ocorre quando você tenta desestruturar uma propriedade de um valor undefined. Descubra como corrigi-lo.

O que é o erro 'Cannot destructure property 'X' of undefined' e como resolvê-lo?

O erro 'Cannot destructure property 'X' of undefined' ocorre quando você tenta desestruturar uma propriedade de uma variável que tem o valor undefined. Esse tipo de erro é comum quando usamos desestruturação de objetos, mas o objeto que estamos tentando desestruturar não foi inicializado ou está com o valor undefined.

O que significa esse erro?

Em JavaScript, a desestruturação é um método poderoso para extrair valores de objetos ou arrays e armazená-los em variáveis. O erro 'Cannot destructure property 'X' of undefined' ocorre quando você tenta acessar uma propriedade de undefined, o que não é permitido.

Exemplo do erro:

let pessoa;
let { nome } = pessoa; // Uncaught TypeError: Cannot destructure property 'nome' of undefined

Neste exemplo, a variável pessoa é undefined e, quando tentamos desestruturar nome dela, o erro é disparado.

Como corrigir esse erro?

  1. Certifique-se de que o valor a ser desestruturado não é undefined:

Antes de desestruturar um objeto, verifique se ele existe e tem um valor válido. Isso pode ser feito utilizando uma verificação condicional ou atribuições padrão.

Exemplo com verificação:

let pessoa;
if (pessoa) {
  let { nome } = pessoa;
  console.log(nome);
} else {
  console.log('Pessoa não definida');
}

Aqui, verificamos se pessoa é undefined antes de tentar acessar sua propriedade nome.

  1. Use valores padrão para evitar desestruturar valores undefined:

Você pode fornecer valores padrão durante a desestruturação. Se a variável for undefined, o valor padrão será usado.

Exemplo com valor padrão:

let pessoa;
let { nome = 'Desconhecido' } = pessoa || {};
console.log(nome); // 'Desconhecido'

Com o operador || {}, garantimos que, se pessoa for undefined, um objeto vazio será usado, e o valor padrão de 'Desconhecido' será atribuído à variável nome.

  1. Certifique-se de que a função retorna um objeto válido:

Se você está recebendo o objeto de uma função, verifique se ela retorna um valor válido e não undefined.

Exemplo com função:

function obterPessoa() {
  return { nome: 'João' };
}
let pessoa = obterPessoa();
let { nome } = pessoa;
console.log(nome); // 'João'

Neste caso, garantimos que a função obterPessoa retorne um objeto válido.

  1. Use o encadeamento opcional para evitar o erro:

Em situações onde você não tem certeza se o objeto existe, você pode usar o encadeamento opcional (?.) para acessar as propriedades com segurança.

Exemplo com encadeamento opcional:

let pessoa = undefined;
let { nome } = pessoa ?? {};
console.log(nome); // undefined, sem erro

O operador ?? (nullish coalescing) garante que, se pessoa for undefined ou null, um objeto vazio será usado, evitando o erro.

  1. Depuração:

Durante o processo de depuração, adicione console.log() para verificar se a variável que está sendo desestruturada tem um valor válido.

Exemplo de depuração:

let pessoa;
console.log(pessoa); // undefined
let { nome } = pessoa; // Vai lançar o erro

Isso ajuda a identificar se a variável tem o valor esperado antes de tentar desestruturá-la.

Conclusão

O erro 'Cannot destructure property 'X' of undefined' ocorre quando tentamos desestruturar uma propriedade de uma variável que é undefined. Para corrigir esse erro, verifique se o valor a ser desestruturado não é undefined, forneça valores padrão quando necessário, e use técnicas como o encadeamento opcional para garantir que a desestruturação seja segura e sem erros.

Esse erro é um dos mais comuns ao trabalhar com desestruturação em JavaScript. Ele pode ser facilmente evitado com algumas boas práticas, como o uso de valores padrão ou verificações antes de acessar as propriedades de objetos. Além disso, o uso de técnicas como o encadeamento opcional e o nullish coalescing tornam o código mais robusto e menos propenso a falhas inesperadas.

Algumas aplicações:

  • Use o encadeamento opcional para acessar propriedades de objetos de forma segura.
  • Forneça valores padrão durante a desestruturação para evitar erros.
  • Verifique sempre se a variável a ser desestruturada é válida antes de utilizá-la.

Dicas para quem está começando

  • Antes de desestruturar um objeto, verifique se ele está definido e não é null ou undefined.
  • Aprenda a usar valores padrão para evitar erros de desestruturação.
  • Use console.log() para depurar variáveis e verificar se o objeto está correto antes de desestruturá-lo.

Contribuições de Ricardo Vasconcellos

Compartilhe este tutorial: O que é o erro TypeError: Cannot destructure property 'X' of undefined e como resolvê-lo?

Compartilhe este tutorial

Continue aprendendo:

Como corrigir o erro de TypeError: Function.prototype.apply não funciona?

O erro 'TypeError: Function.prototype.apply não funciona' ocorre quando a função 'apply' é chamada em um contexto incorreto. Saiba como corrigir.

Tutorial anterior

O que causa o erro ReferenceError: X is not defined e como corrigir?

O erro ReferenceError: X is not defined ocorre quando você tenta acessar uma variável ou função que ainda não foi declarada.

Próximo tutorial