@a11d/is-writable

中文文档
1.0.4发布于 2026/10/07MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 4579

Object.isWritable, telling whether a property can be assigned, considering descriptors, accessors, freezing and prototypes.

原始使用文档
文档目录4 节
  1. Installation
  2. API
  3. Behavior
  4. Exports

@a11d/is-writable

Check if an object property is writable, accounting for property descriptors, getters/setters, and the prototype chain.

import '@a11d/is-writable'

const obj = { name: 'John' }
Object.defineProperty(obj, 'id', { value: 123, writable: false })

Object.isWritable(obj, 'name') // true
Object.isWritable(obj, 'id') // false

Installation

npm install @a11d/is-writable

API

Object.isWritable(object, key): boolean — Check if a property can be written to

Returns true if the property is writable, false otherwise.

const obj = {}
Object.defineProperty(obj, 'readonly', { value: 42, writable: false })

Object.isWritable(obj, 'readonly') // false
Object.isWritable(obj, 'newProp') // true (non-existent properties are writable)

Checks the entire prototype chain:

class Base {
    get value() { return 1 }
}

class Child extends Base {}

Object.isWritable(new Child(), 'value') // false (getter-only in prototype)

Behavior

Frozen objects

Returns false for all properties on frozen objects:

const obj = { name: 'John' }
Object.freeze(obj)

Object.isWritable(obj, 'name') // false
Object.isWritable(obj, 'newProp') // false
Getters and setters

Getter-only properties are not writable:

const obj = {
    get value() { return 42 }
}

Object.isWritable(obj, 'value') // false

Properties with both getter and setter are writable:

const obj = {
    get value() { return this._value },
    set value(v) { this._value = v }
}

Object.isWritable(obj, 'value') // true

Setter-only properties are writable:

const obj = {
    set value(v) { console.log(v) }
}

Object.isWritable(obj, 'value') // true
Non-existent properties

Properties that don't exist are considered writable (unless the object is frozen):

const obj = {}
Object.isWritable(obj, 'newProp') // true
Prototype chain

Checks all descriptors in the prototype chain:

class Base {
    get value() { return 1 }
}

class Child extends Base {
    get value() { return 2 }
    set value(v) { /* add setter alongside getter */ }
}

Object.isWritable(new Base(), 'value') // false (getter-only)
Object.isWritable(new Child(), 'value') // true (has both getter and setter)

Exports

NameKind
isWritablefunction

版本与发布记录

@a11d/is-writable 共发布 6 个版本,首次发布于 2023/10/16;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.4latest2026/10/0730 天前
1.0.32026/09/291 个月前
1.0.22025/12/0910 个月前
1.0.12023/10/163 年前
1.0.02023/10/163 年前
0.0.12023/10/163 年前

关于 @a11d/is-writable 的常见问题

@a11d/is-writable 是什么?

Object.isWritable, telling whether a property can be assigned, considering descriptors, accessors, freezing and prototypes.

如何安装 @a11d/is-writable?

在项目目录运行 npm install @a11d/is-writable,或使用 pnpm add / yarn add / bun add。

@a11d/is-writable 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@a11d/is-writable 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@a11d/is-writable 可以商用吗?

@a11d/is-writable 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@a11d/is-writable 的下载量有多少?

根据 npm 官方下载统计,@a11d/is-writable 在 2026/10/05 – 2026/11/03 这 30 天内被下载 4,579 次,日均约 153 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@a11d/is-writable 还在维护吗?

最新版本 1.0.4 发布于 2026/10/07(30 天前);至今共发布 6 个版本,其中过去 12 个月发布了 3 个;首次发布于 2023/10/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。