Better `Object.defineProperty()`.
npm install redefine-property






Better Object.defineProperty().
This is identical toObject.defineProperty()
except:
- The default value of enumerable, writable and
configurable is true
- If the property already exists, its descriptors are
used as default, even if the property is
inherited
- Invalid arguments throw with a clear error message
- Otherwise, this never throws
``js
import redefineProperty from 'redefine-property'
const object = redefineProperty({}, 'prop', { value: 0, enumerable: false })
console.log(Object.getOwnPropertyDescriptor(object, 'prop'))
// {
// value: 0,
// enumerable: false,
// writable: true,
// configurable: true,
// }
`
`bash`
npm install redefine-property
This package works in both Node.js >=18.18.0 and
browsers.
This is an ES module. It must be loaded using
an import or import() statement,
not require(). If TypeScript is used, it must be configured to
output ES modules,
not CommonJS.
value object\key string | symbol | number\descriptor PropertyDescriptor\value
_Return value_:
Like
Object.defineProperty(...)
but with some additional features.
`js
const object = redefineProperty({}, 'prop', { value: 0 })
console.log(Object.getOwnPropertyDescriptor(object, 'prop'))
// {
// value: 0,
// enumerable: true,
// writable: true,
// configurable: true,
// }
const otherObject = Object.defineProperty({}, 'prop', { value: 0 })
console.log(Object.getOwnPropertyDescriptor(otherObject, 'prop'))
// {
// value: 0,
// enumerable: false,
// writable: false,
// configurable: false,
// }
`
`js`
const object = redefineProperty({}, 'prop', {
value: 0,
enumerable: false,
writable: true,
configurable: true,
})
redefineProperty(object, 'prop', { value: 1, configurable: false })
console.log(Object.getOwnPropertyDescriptor(object, 'prop'))
// {
// value: 1,
// enumerable: false,
// writable: true,
// configurable: false,
// }
`js
class CustomError extends Error {}
redefineProperty(CustomError.prototype, 'name', {
value: 'CustomError',
enumerable: false,
})
const error = new CustomError('')
redefineProperty(error, 'name', { value: 'ExampleError' })
console.log(Object.getOwnPropertyDescriptor(error, 'name'))
// {
// value: 'ExampleError',
// enumerable: false,
// writable: true,
// configurable: true,
// }
const otherError = new CustomError('')
Object.defineProperty(otherError, 'name', { value: 'ExampleError' })
console.log(Object.getOwnPropertyDescriptor(otherError, 'name'))
// {
// value: 'ExampleError',
// enumerable: false,
// writable: false,
// configurable: false,
// }
`
`js`
Object.defineProperty({}, true, { value: 0 }) // This does not throw
redefineProperty({}, true, { value: 0 }) // This throws
`js
const object = new Proxy(
{},
{
defineProperty: () => {
throw new Error('example')
},
},
)
redefineProperty(object, 'prop', { value: 1 }) // This does not throw
Object.defineProperty(object, 'prop', { value: 1 }) // This throws
`
For any question, _don't hesitate_ to submit an issue on GitHub.
Everyone is welcome regardless of personal background. We enforce a
Code of conduct in order to promote a positive and
inclusive environment.
This project was made with ❤️. The simplest way to give back is by starring and
sharing it online.
If the documentation is unclear or has a typo, please click on the page's Edit`
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug or add a new feature, please check our
guidelines. Pull requests are welcome!