JSDoc 3 是一個(gè)用于 JavaScript 的API文檔生成器,類似于 Javadoc 或 phpDocumentor??梢詫⑽臋n注釋直接添加到源代碼中。JSDoc 工具將掃描您的源代碼并為您生成一個(gè) HTML 文檔網(wǎng)站。
JSDoc 速通手冊(cè)
——編程獅(w3cschool.cn)為前端新手量身打造的“一行一用”速查表
看完就能寫注釋,寫完就能出文檔!
1 起手式:一條萬(wàn)能模板
/**
* @file 文件描述
* @author 編程獅 <dev@w3cschool.cn>
* @license MIT
* @since 2025-08-06
* @version 1.0.0
*/
2 常用標(biāo)簽「一行一用」
場(chǎng)景 |
簡(jiǎn)寫模板 |
備注 |
描述變量 |
/** @type {number} */ let count |
寫類型即可 |
描述函數(shù) |
/** @param {string} name - 用戶名 */ |
必傳參數(shù) |
可選參數(shù) |
/** @param {number} [age=18] - 年齡 */ |
中括號(hào) + 默認(rèn)值 |
多個(gè)類型 |
/** @type {(string\|number)} id */ |
管道符 |
對(duì)象結(jié)構(gòu) |
/** @type {{a: string, b: number}} */ |
行內(nèi)對(duì)象 |
返回類型 |
/** @returns {Promise<boolean>} */ |
Promise 也支持 |
回調(diào)函數(shù) |
/** @callback FetchCb @param {string} url @returns {Promise} */ |
先定義后使用 |
枚舉 |
/** @enum {number} */ const STATUS = { OK: 200, ERROR: 500 } |
自動(dòng)生成枚舉文檔 |
類注釋 |
/** @class User @desc 用戶實(shí)體 */ |
構(gòu)造函數(shù)上加 |
棄用 |
/** @deprecated 用 fetchDataAsync 代替 */ |
IDE 會(huì)畫刪除線 |
3 完整函數(shù)示例(復(fù)制即用)
/**
* 獲取用戶詳情
* @func
* @param {string} id - 用戶ID
* @param {object} [options] - 可選配置
* @param {boolean} [options.cache=true] - 是否緩存
* @returns {Promise<User>} 用戶實(shí)例
* @throws {Error} 當(dāng)網(wǎng)絡(luò)異常
* @example
* getUser('123').then(console.log);
*/
async function getUser(id, { cache = true } = {}) {
if (!id) throw new Error('id 不能為空');
return fetch(`/api/user/${id}?cache=${cache}`).then(r => r.json());
}
4 一鍵生成文檔
- 安裝
npm i -D jsdoc
- 配置
jsdoc.json
{
"source": { "include": ["src"] },
"opts": { "destination": "docs" }
}
- 運(yùn)行
npx jsdoc -c jsdoc.json
- 打開(kāi)
docs/index.html
查看效果。
5 速背口訣
“變量加 @type
,函數(shù)加 @param
,返回加 @returns
,枚舉用 @enum
,棄用 @deprecated
別忘寫!”
6 JSDoc 3 全部標(biāo)簽速查表(共 70+)
按使用頻率分 4 級(jí):
??? 必背(藍(lán)框)??? 常用(綠框)?? 進(jìn)階(灰框)?? 其他(了解)
① 文件級(jí)
標(biāo)簽 |
說(shuō)明 |
示例 |
@file / @fileoverview |
文件描述 |
@file 用戶模塊入口 |
@author |
作者 |
@author 編程獅 <dev@w3cschool.cn> |
@copyright |
版權(quán) |
@copyright 2025 w3cschool |
@license |
許可證 |
@license MIT |
@version |
版本 |
@version 1.2.0 |
@since |
起始版本 |
@since 2025-08-06 |
② 類型與變量
標(biāo)簽 |
說(shuō)明 |
示例 |
@type ??? |
變量/返回值類型 |
@type {number} |
@typedef ?? |
自定義類型 |
@typedef {{x:number,y:number}} Point |
@callback ?? |
回調(diào)類型 |
@callback FetchCb |
@enum ? |
枚舉 |
@enum {number} STATUS |
@var ? |
變量別名 |
@var {string} title |
@constant / @const ?? |
常量 |
@constant {string} API_ROOT |
@readonly ? |
只讀 |
@readonly |
@default ? |
默認(rèn)值 |
@default 42 |
③ 函數(shù) / 方法
標(biāo)簽 |
說(shuō)明 |
示例 |
@param / @arg ??? |
參數(shù) |
@param {string} name - 用戶名 |
@returns / @return ??? |
返回值 |
@returns {Promise<User>} |
@throws / @exception ?? |
拋出異常 |
@throws {Error} 參數(shù)錯(cuò)誤 |
@example ?? |
用法示例 |
@example add(1,2) // 3 |
@async ? |
異步 |
@async |
@generator / @yields ? |
生成器 |
@yields {number} |
@this ? |
this 指向 |
@this {HTMLElement} |
④ 類 / 模塊 / 命名空間
標(biāo)簽 |
說(shuō)明 |
示例 |
@class / @constructor ??? |
構(gòu)造函數(shù) |
@class Person |
@classdesc ? |
類描述 |
@classdesc 用戶實(shí)體 |
@extends / @augments ?? |
繼承 |
@extends Animal |
@implements ? |
實(shí)現(xiàn)接口 |
@implements Drawable |
@interface ? |
接口 |
@interface EventEmitter |
@abstract / @virtual ? |
抽象 |
@abstract draw() |
@override ? |
重寫 |
@override |
@static ? |
靜態(tài)成員 |
@static findById() |
@instance ? |
實(shí)例成員 |
@instance |
@inner ? |
內(nèi)部成員 |
@inner toString |
@memberof ? |
隸屬對(duì)象 |
@memberof utils |
@namespace ?? |
命名空間 |
@namespace math |
@module ?? |
模塊 |
@module user/api |
@exports ? |
出口 |
@exports UserModel |
@requires ? |
依賴模塊 |
@requires lodash |
⑤ 成員可見(jiàn)性
標(biāo)簽 |
說(shuō)明 |
@public ? |
公開(kāi)(默認(rèn)) |
@private ?? |
私有 |
@protected ?? |
受保護(hù) |
@package ? |
包內(nèi)可見(jiàn) |
⑥ 事件與監(jiān)聽(tīng)
標(biāo)簽 |
說(shuō)明 |
@event ? |
定義事件 |
@listens ? |
監(jiān)聽(tīng)事件 |
@fires / @emits ? |
觸發(fā)事件 |
⑦ 其他實(shí)用標(biāo)簽
標(biāo)簽 |
說(shuō)明 |
@description / @desc ?? |
長(zhǎng)描述 |
@summary ? |
簡(jiǎn)短描述 |
@deprecated ?? |
已棄用 |
@see ? |
參考鏈接 |
@link / @linkcode / @linkplain ? |
內(nèi)聯(lián)鏈接 {@link URL} |
@tutorial ? |
教程鏈接 |
@ignore ? |
忽略該符號(hào) |
@todo ? |
TODO 任務(wù) |
@borrows ? |
借用其他注釋 |
@name ? |
強(qiáng)制名稱(用于虛擬注釋) |
@variation ? |
同名變體 |
@external ? |
外部類型 |
@mixin / @mixes ? |
混入 |
⑧ 模板與泛型
標(biāo)簽 |
說(shuō)明 |
@template ? |
泛型參數(shù) @template T |
@satisfies ? |
TypeScript 專用 |
⑨ 完整模板速用
/**
* @file 用戶模塊
* @author 編程獅 <dev@w3cschool.cn>
* @since 1.0.0
*/
/**
* @typedef {Object} User
* @property {string} name 用戶名
* @property {number} age 年齡
*/
/**
* 創(chuàng)建用戶
* @func
* @param {User} user
* @returns {Promise<User>}
* @throws {Error} 參數(shù)非法
* @example
* createUser({name:'Tom',age:18})
*/
async function createUser(user) { ... }