TypeError: can't redefine non-configurable property "x"

A exceção do Javascript "can't redefine non-configurable property" ocorre quando é feita a tentativa de redefinir uma propriedade, mas essa propriedade não é configurável.

Mensagem

js
TypeError: Cannot modify non-writable property {x} (Edge)
TypeError: can't redefine non-configurable property "x" (Firefox)
TypeError: Cannot redefine property: "x" (Chrome)

Tipo de Erro

O que deu errado?

Foi feita a tentativa de redefinir uma propriedade, mas essa propriedade não é configurável. O atributo configurable controla se a propriedade pode ser deletada do objeto e se seus atributos (Exceto writable) podem ser alterados. Geralmente, propriedades de um objeto criado por um inicializador de objeto são configuráveis. Contudo, por exemplo, ao usar Object.defineProperty(), a propriedade não é configurável por padrão.

Exemplos

Propriedades não configuráveis criadas por Object.defineProperty

Object.defineProperty() cria uma propriedade não configurável se você não especificá-las como configurável.

js
var obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar" });

Object.defineProperty(obj, "foo", { value: "baz" });
// TypeError: can't redefine non-configurable property "foo"

Você vai precisar alterar a propriedade "foo" para configurável, se você pretende redefini-la posteriormente no código.

js
var obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar", configurable: true });
Object.defineProperty(obj, "foo", { value: "baz", configurable: true });

Veja também