jsDoc 注释规范

embedded/2025/2/22 4:39:06/

jsDoc 注释规范


在这里插入图片描述

定义

jsDoc 是一种用于 JavaScript 代码的注释规范,它通过特定的标签和格式,帮助开发者为代码添加详细的文档说明。这些注释可以被各种工具和编辑器解析,生成 API 文档或提供代码提示,极大地提升了代码的可读性和维护性。接下来,我们将详细介绍 jsDoc 的各种注释类型及其用法。

当然,以下是 jsDoc 注释规范的进阶用法,这些用法可以帮助开发者更精细地描述代码,提高代码的可读性和维护性。

1. 自定义类型定义

  • 使用场景:当代码中存在重复使用的复杂数据结构时,可以使用 @typedef 定义自定义类型,然后在其他地方引用。

  • 示例

/*** 定义一个用户对象类型* @typedef {Object} User* @property {string} name - 用户名* @property {number} age - 用户年龄* @property {string} email - 用户邮箱*//*** 创建一个新的用户对象* @param {User} user - 用户信息* @returns {User} 新创建的用户对象*/
function createUser(user) {return {...user,createdAt: new Date().toISOString()};
}
  • 扩展:自定义类型不仅限于对象,还可以用于函数签名、数组等复杂数据类型。

2. 类型继承

  • 使用场景:当需要描述一个类型继承自另一个类型时,可以使用 @augments 标签。

  • 示例

/*** 定义一个基础对象类型* @typedef {Object} BaseObject* @property {string} id - 对象ID*//*** 定义一个继承自 BaseObject 的扩展对象类型* @typedef {Object} ExtendedObject* @augments {BaseObject}* @property {string} name - 对象名称*//*** 创建一个新的扩展对象* @param {ExtendedObject} obj - 扩展对象信息* @returns {ExtendedObject} 新创建的扩展对象*/
function createExtendedObject(obj) {return {...obj,createdAt: new Date().toISOString()};
}
  • 扩展@augments 标签可以用于描述类、接口等复杂类型的继承关系。

3. 回调函数类型定义

  • 使用场景:当需要描述一个回调函数的类型时,可以使用 @callback 标签。

  • 示例

/*** 定义一个处理用户数据的回调函数类型* @callback UserDataCallback* @param {User} user - 用户对象* @param {number} index - 用户索引* @param {User[]} users - 用户数组*//*** 遍历用户数组并调用回调函数* @param {User[]} users - 用户数组* @param {UserDataCallback} callback - 回调函数*/
function processUsers(users, callback) {users.forEach(callback);
}
  • 扩展:回调函数类型定义有助于在复杂异步操作中保持代码的清晰和一致性。

4. 枚举类型定义

  • 使用场景:当需要描述一组固定的常量值时,可以使用 @enum 标签。

  • 示例

/*** 定义一个用户状态枚举类型* @readonly* @enum {string}*/
const UserStatus = {/*** 活跃用户*/ACTIVE: 'active',/*** 禁用用户*/DISABLED: 'disabled',/*** 删除用户*/DELETED: 'deleted'
};
  • 扩展@enum 标签可以与 @type 标签结合使用,以描述函数参数或返回值的枚举类型。

5. 泛型类型定义

  • 使用场景:当需要描述一个函数可以处理多种类型的数据时,可以使用 @template 标签。

  • 示例

/*** 创建一个数组的第一个元素* @template T* @param {T[]} arr - 任意类型的数组* @returns {T} 数组的第一个元素*/
function getFirstElement(arr) {return arr[0];
}
  • 扩展:泛型类型定义有助于在 TypeScript 风格的类型系统中提高代码的重用性和灵活性。

6. 使用 Markdown 语法

  • 使用场景:在 jsDoc 注释中使用 Markdown 语法可以增强文档的可读性和格式。

  • 示例

/*** 示例函数,展示 Markdown 语法* * 这是一个示例函数的描述。* * @param {number} num1 - 第一个加数* @param {number} num2 - 第二个加数* @returns {number} 两数之和* * @example* ```javascript* console.log(addNumbers(2, 3)); // 输出 5* ```*/
function addNumbers(num1, num2) {return num1 + num2;
}
  • 扩展:在 jsDoc 注释中,可以使用标题、列表、代码块等 Markdown 语法元素来增强文档的可读性。

7. 跨文件类型引用

  • 使用场景:当需要在不同文件之间引用自定义类型时,可以使用相对路径或模块名称来引用。

  • 示例

/*** 引用另一个文件中定义的 User 类型* @typedef {import('./user.js').User} User*//*** 创建一个新的用户对象* @param {User} user - 用户信息* @returns {User} 新创建的用户对象*/
function createUser(user) {return {...user,createdAt: new Date().toISOString()};
}
  • 扩展:跨文件类型引用有助于在大型项目中保持类型定义的一致性和可维护性。

8. 使用 JSDoc 插件

  • 使用场景:为了提高代码编写和文档生成的效率,可以使用各种 JSDoc 插件。

  • 示例

    • VS Code 插件:安装 JSDoc 相关的 VS Code 插件,可以提供自动补全、错误提示等功能。
    • 文档生成工具:使用如 jsdoc-to-markdown、typedoc 等工具将 JSDoc 注释转换为 Markdown 或 HTML 格式的文档。
  • 扩展:根据项目的具体需求,选择合适的 JSDoc 插件和工具,以提高开发效率。

总结

jsDoc 注释规范为 JavaScript 代码提供了详细的文档说明,有助于提升代码的可读性和维护性。通过掌握这些进阶用法,开发者可以更精细地描述代码,提高代码的可读性和维护性,同时也有助于团队协作和知识共享。

看到这里的小伙伴,欢迎点赞、评论,收藏!

如有前端相关疑问,博主会在第一时间解答,也同样欢迎添加博主好友,共同进步!!!


http://www.ppmy.cn/embedded/164229.html

相关文章

Redis7——基础篇(二)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一) 接上期内容:上期完成了Redis环境的搭建。下面开始学习Redis常用命令…

通过BingAPI爬取Bing半个月内壁纸

通过BingAPI爬取Bing半个月内壁纸 一、前言二、爬虫代码三、代码说明 一、前言 爬取Bing搜索网站首页壁纸的方式主要有两种,第一种为间接爬取,即并不直接对Bing网站发起请求,而是对那些收集汇总了Bing壁纸的网站发起请求,爬取图片…

中电金信:数字基础设施未来展望·行业定制与开源融合

随着数字化向数智化的演进,各行各业对新型数字基础设施的需求不断攀升。在技术层面,云原生和平台化已经成为构建行业数字基础设施的普遍选择。在这一进程中,不仅要满足行业对极致性能的特殊需求,实现运维与管理的高效性&#xff0…

观察者模式示例代码

观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。常见于消息队列(MQ)、Zookeeper 事件通知等场景。 import java.util.ArrayList; import java.util.List;// 主题接口…

GRU是什么?GRU对LSTM做了哪些改动?

GRU通过简化门控机制、合并状态向量和简化计算流程等方式,降低了模型的复杂度,提高了训练速度,并且在一些任务上表现优异。 1. 简化了门控机制:GRU只有两个门控单元(更新门和重置门)。GRU的更新门控制了前…

解决macos安装docker后不能远程连接的问题

解决 macOS 安装 Docker 后无法远程连接的问题 在 macOS 上安装 Docker 之后,默认情况下可能无法通过远程连接(如 docker 命令)来管理容器。这是因为 macOS 的 Docker 实例运行在一个沙盒环境中,并未暴露 Docker 守护进程的 sock…

基于Python+Sqlite实现的选课系统

基于PythonSqlite实现的选课系统 1.选课系统数据库设计 1.1从ER图到表结构 实体集 课程信息 course (course_id, title, credits, dept_name)开课信息 section (course_id, section_id, start, end, classroom_no, limit, day, lesson)账户信息 account (ID, password, role…

Linux-C/C++《C/8、系统信息与系统资源》

在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取系统信息,譬如获取系统时间、日期以及设置系统时间、日期等&#xf…