Skip to content

JSDoc 注释规范

中文传送门入口
英文传送门入口

示例

javascript
/**
* @fileOverview 简单的方法标注示例
* @author <a href="#">Alice-Ti</a>
* @version 0.1
*/

/**
* @description 加法运算
* @param {Num} num1 加数
* @param {Num} num2 被加数
* @return {Num} result 结果
*/
function add(num1,num2){
    return num1 + num2;
}

/**
* @description 减法运算
* @param {Num} num1 减数
* @param {Num} num2 被减数
* @return {Num} result 结果
*/
function minus(num1,num2){
    return num1 – num2;
}

/**
* @description 减法运算
* @param {Object} options
* @param {Num} [options.num1=0]
* @param {Num} [options.num2]
* @return {Num} result 结果
*/
function calculate({ num1,num2 }){
   return // do sth.
}

描述注释类型注释 分开

javascript
/**
 * @typedef ComplexObj
 * @property {object} a 对象a
 * @property {object} a.b 对象a.b
 * @property {number} a.b.c 数字a.b.c
 * @property {object} y 有一个对象y
 * @property {string} y.x 字符串
 * @property {string[]} z 字符串数组
 */

/**
 * 复杂的对象
 * @type {ComplexObj}
 */
const complexObj = {
  a: {
    b: {
      c: 1
    }
  },
  y: {
    x: 'hello'
  },
  z: ['r', 'y']
}
javascript
/**
* @fileOverview 简单的类对象标注示例
* @author <a href="#">Alice-Ti</a>
* @version 0.1
*/

/**
* @author Alice-Ti
* @constructor Person
* @description 一个Person类
* @see The <a href="#">Alice-Ti</a >.
* @example new Parent(“张三”,15);
* @since version 1.0.0
* @param {String} username 姓名
* @param {Num} age 年龄
*/
function Person(username,age)
{
    /**
    * @description {Sting} 姓名
    * @field
    */
    this.username = username;
    
    /**
    * @description {Num} 年龄
    * @field
    */
    this.age = age;
    
    /**
    * @description 弹出say内容
    * @param {String} content 内容
    */
    this.say = function(content)
    {
        alert(this.username+” say :”+content);
    }
    
    /**
    * @description 返回json格式的对象
    * @return {String} json格式
    * @see Person#say
    */
    this.getJson = function(){
        return “{name:”+this.username+”,age”+this.age+”}”;
    }
}

通过「注释生成文档」

使用 docdown 将注释转成 markdown 文件,然后用这些 markdown 文件生成 html.

附录


标签名使用范围说明
@abstract父类上定义抽象属性,由子类来实现
@access文档@access < @access < package | private | protected | public >
@alias文档标识A为B的昵称
@author文档作者名
@borrows文档复制另一个注释的所有信息
@copyright文档版权信息
@deprecated文档标识已废弃
@description文档描述。等同于注释最开始的描述,此标签优先级更高
@example文档可以用文本,或者代码写一个示例
@exports文档在非ES Module的模块规范下,标识导出的内容
@function文档标识一个函数
@ignore文档标识某个对象、属性不在文档中展示
@file文档一般用在文件开始,用来描述文件内容
@enum文档标识一个同类型集合
@license文档软件许可证
@package文档package-private。即标识某个属性仅同目录可用。仅标识在输出文档。
@readonly文档标记一个只读属性
@summary文档@description 的简写版本
@generator文档标识一个生成器函数 (generator function)
@see文档链接到某处
@since文档从某个版本开始支持
@tutorial文档类似锚点,指向文档中定义的锚点
@version文档标识版本
@todo文档记录一些待实现的功能,可以有多个
@hideconstructor文档在文档中隐藏类的构造器函数
@constant常量标识一个常量,会自动识别类型
@default值引用变量为单个值引用变量在文档中生成默认值
@lends对象字面量标识一个对象字面量为一个类(使用某个函数生成类,对象字面量为其参数)
@async函数标识函数为异步函数,默认情况下无需使用,会自动识别。
@callback函数标识一个回调函数,使用与@typedef 类似
@class函数标识一个函数为类
@classdesc函数类的描述,与@class搭配使用
@param函数函数入参
@returns函数函数的返回值标识
@throws函数标识一个函数可能抛出的错误类型,可以有多个
@constructs对象字面量一般配合@lends使用,标识一个函数为类的constructor
@augments标识当前类的父类,同@extends
@event标识一个类中的事件
@fires标识在某个方法中会触发某个事件
@inheritdoc类,文档标识子类继承父类的文档
@private私有。与普通的属性不同,被标识的属性不会出现在输出文档中。
@protected标识为仅本模块可用。
@public所有属性默认即为public。仅标识,如果需要标识范围,需使用@instance, @static, and @global
@static标识不会被实例化的类属性;或者模块中的某个属性。
@global标识一个属性为全局属性,如标识一个局部属性为全局属性
@implements标识类实现了哪个接口
@yields标识生成器函数的返回值
@type标识一个类型
@external标识一个外部的对象,或者库。比如定义$为jQuery
@typedef自定义类型。
@variation如果出现了重名,例如命名空间和类,用此标识来区分
@this标识当前作用域中this的指向
@requires标记当前模块依赖的模块,可以有多个
@inner标记某属性为类、模块的内部属性
@instance标识为当前实例专属属性
@interface标识一个可被实现的接口,接口可以只有注释,没有实体
@kind标识一个对象的类型
@listens标识监听了某个事件
@member标识某个属性是对象的属性
@memberof标识某个属性属于某个对象
@mixes标识当前对象混入了另一个对象
@mixin标识一个混入对象
@module标记当前文件为一个模块
@name覆盖命名一个变量。最好用在不在当前代码中声明的变量,也就是虚拟注释
@namespace标识一个命名空间
@override子类覆盖父类的同名属性
@property给对象的某个属性添加标识,配合@typedef使用,可生成任意自定义对象
@template泛型

Types in JavaScript With Zod and JSDoc

Last updated: