使用JSDoc的@readonly可标注只读属性以提升开发体验,但需结合Object.defineProperty设置writable为false才能实现运行时保护,TypeScript的readonly关键字则能在编译阶段阻止修改,提供更强的类型检查。

在JavaScript中,给对象属性设置只读特性通常依赖于 Object.defineProperty 或 TypeScript 的类型系统。但如果你是在使用支持 JS Doc 注解(JSDoc)的纯 JavaScript 项目中,可以通过 JSDoc 注解来标注某个属性为只读,帮助开发工具(如 VS Code)提供智能提示和类型检查。
@readonly 注解:标记只读属性
JSDoc 提供了 @readonly 标签,用于说明某个属性不应被修改。它不会强制运行时保护,但能提升代码可读性和编辑器支持。
基本语法:
/** * @typedef {Object} User * @property {string} name – 用户名 * @readonly * @property {string} id – 用户ID,只读 */
使用示例:
/** @type {User} */const user = { name: ‘Alice’, id: ‘12345’};
user.id = ‘67890’; // 编辑器会警告:尝试修改只读属性
虽然 JS 运行时不会阻止赋值(除非属性实际设为不可写),但像 VS Code 这类工具会根据注解提示开发者该属性应被视为只读。
结合 Object.defineProperty 实现真正的只读
若要真正防止属性被修改,需结合 Object.defineProperty 将 writable 设为 false。
Visual Studio IntelliCode
微软VS平台的 AI 辅助开发工具
46 查看详情
示例:
const user = {};
Object.defineProperty(user, ‘id’, {value: ‘12345’,writable: false,enumerable: true,configurable: false});
user.id = ‘67890’; // 严格模式下报错:Cannot assign to read only property
此时配合 JSDoc 注解,语义更完整:
/** * @typedef {Object} Config * @property {string} version * @readonly * @property {string} apiEndpoint */
TypeScript 中的 readonly 更强大
如果项目使用 TypeScript,可以直接用 readonly 关键字定义只读属性:
interface User { readonly id: string; name: string;}
const user: User = { id: ‘123’, name: ‘Bob’ };user.id = ‘456’; // 编译时报错
TypeScript 在编译阶段就阻止对只读属性的赋值,比 JSDoc 更严格。
基本上就这些。JSDoc 的 @readonly 是一种文档层面的标注,适合在纯 JS 项目中提示属性不应被修改;如需运行时保护,仍需使用 Object.defineProperty。两者结合,既能提升协作效率,也能增强代码健壮性。
以上就是JS注解怎么标注只读属性_ JS对象只读属性的注解方法与使用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/874085.html
微信扫一扫
支付宝扫一扫