Symbol como chave
Em código real, às vezes você precisa criar propriedades em um objeto que não sejam acidentalmente sobrescritas ou listadas em iterações comuns. Por exemplo, bibliotecas ou frameworks usam Symbols para adicionar metadados internos sem poluir a interface pública do objeto. Dominar Symbols permite que você projete APIs mais seguras e evite conflitos de nomes.
O PROBLEMA
Use Symbol para propriedades privadas. Symbol não aparece em Object.keys().
EXEMPLO
const _id = Symbol("id");
const obj = {nome:"Ana", [_id]: 123};
Object.keys(obj) → ["nome"]SOBRE O CONCEITO
Symbol é um tipo de dado primitivo que cria um identificador único e imutável. Ao usar const _id = Symbol('id'); e depois obj[_id] = 123;, essa chave não aparece em Object.keys(obj), porque Object.keys só enumera propriedades com chaves string. Erro comum: pensar que dois Symbols com a mesma descrição são iguais — na verdade Symbol('id') !== Symbol('id'), cada chamada gera um novo símbolo. Para recuperar propriedades Symbol, usa-se Object.getOwnPropertySymbols(obj). Isso é útil para simular propriedades privadas em objetos sem usar class ou WeakMap.
RESOLUÇÃO