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