學習紀錄 | JSDoc 是什麼?怎麼寫?

更新 發佈閱讀 7 分鐘


什麼是 JSDoc

JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也能達成型別檢查的用途,非常方便好用!


寫 JSDoc 的第一步

JSDoc 註解的方式會以/** 開頭, */ 結尾,中間使用不同的 @tag 來定義函式、描述詞、傳入參數、回傳值...等內容,每個函式都需要各自寫成一塊,不能全部寫在同個註解內哦~

註解會寫在變數或函式的上方,直接看一個範例吧,先了解一下大致的撰寫方式,等等再詳細介紹常用的 @tag 有哪些,範例:

/**
* @function add
* @description add two number
* @param {Number} num1 - 後面可以加上對 num1 的描述
* @param {Number} num2
* @returns {Number}
*/
function add(num1, num2) {
return num1 + num2
}

滑鼠移動到 add() 的時候,就能看到相關的註解內容囉!

JSDoc 提示

JSDoc 提示


文件生成

註解撰寫完成後,總要看到成果吧,於是我們可以先來簡單生成文件,看看文件長什麼樣

  • 在專案內安裝 JSDoc 套件 npm install jsdoc
  • 使用指令jsdoc + 文件路徑,即可編譯並自動產生一個名為 out 的文件夾
    • 可自行新增 jsdoc.config.json 檔案來修改文件生成的設定
    • 也可在 package.json 的 script 中,加入生成文件的指令 "doc": "jsdoc -c jsdoc.config.json"
out 資料夾

out 資料夾


從 out 文件夾內開啟剛剛那份檔案,就可以看到文件內有 add function 啦!如果不喜歡原生文件的樣式,也可以使用其他套件(如:clean-jsdoc-theme)來客製化你的JSDoc哦~

JSDoc 文件

JSDoc 文件


接下來再熟悉一些常用的@tag ,掌握 JSDoc 就不難啦~剛開始學 JavaScript 時,都會先宣告常數與變數,以及學習不同類型的型別,再來學 function 對吧,以下會按照同樣的方式來介紹常用的@tag


定義常數&型別

  • @constant / @const 用來定義常數,與使用 const 定義常數的概念相同,定義後的值不可被修改
  • @type {Type} 用來定義型別,變數不需要使用額外標籤,直接定義型別即可,{} 內可以是基本型別或其他客製化組合的類型(@typedef 後面會介紹)
/**
* @const name
* @type {String}
*/
const name = 'Amber'

/**
* @description favorite color
* @type {String} color
*/
let color = 'yellow'
  • @const 可與 @type 合併撰寫
/**
* @const {String} name
*/
const name = 'Amber'
  • @property 定義物件屬性,如果屬性是可選的,放在括號中 ex @property {String} [favoriteColor]
/**
* @type {Object} person
* @property {String} name
* @property {String} [favoriteColor]
*/
const person = {
name: 'Amber',
favoriteColor: 'yellow'
}



定義函式

@function 定義函式
@description 函式的描述內容
@param 函式的參數
@returns 函式返回值
@example 寫一些函式 input/output 範例參考

/**
* @typedef {Object} myObject
* @property {String} name
* @property {Number} age
* @property {Boolean} isDeveloper
*/

/**
* @function createPerson
* @description Create a person object
* @param {String} name - The name of the person
* @param {Number} age - The age of the person
* @param {Boolean} isDeveloper - The developer status of the person
* @returns {myObject} - The person object
*/
function createPerson(name, age, isDeveloper) {
return {
name:name,
age,
isDeveloper
}
}



定義客製化的型別

@typedef {Type} 定義客製化型別

有仔細看的讀者應該會發現,上面 createPerson函式的 return 值是一個物件,但是我給他定義的型別是 myObject 吧,這就是客製化型別 @typedef 的用途!如果有巢狀物件需要定義時,可以使用 @typedef 先定義客製化物件內容,再用 @type 來定義物件型別,將型別指定為 typedef 所定義的內容,再來看一個範例吧:

/**
* @typedef {Object} Class
* @property {String} classTitle
* @property {String} teacher
* @property {Number} classroom
*/

/**
* @type {Array<Class>} myClass
*/

const myClass = [
{
classTitle: 'math',
teacher 'mathTeacher',
classroom: 102
},
{
classTitle: 'art',
teacher 'artTeacher',
classroom: 105
}
]



其他常用 tag

@module 將當前文件定義為模組,文件內所有參照都屬於這個 module
@global 跨檔案使用@typedef,將會忽略程式碼本身作用域,定義為全域皆可使用 @throws 定義 function 會拋出的錯誤
@see 表示可以參考另一個文件內容或外部資源,外部資源用 @link 連結
@class /@constructor 將內容定義為 Class,通常會自動識別,不需要特別撰寫定義


那 JSDoc 介紹差不多就到這邊啦,我是Amber,前端學習中,歡迎交流討論~🧸


參考資料

沒辦法用 TypeScript?別擔心,你還可以寫 JSDoc 標注類型
前端使用 JSDoc 生成文件

Step-by-Step Guide to JSDoc and TypeScript in Modern JavaScript Projects in 15 Minutes!

留言
avatar-img
留言分享你的想法!
avatar-img
Amber hh的沙龍
23會員
22內容數
Amber hh的沙龍的其他內容
2024/09/04
第三次月會來了!這個月的主題是「工程師的溝通秘訣」 很多人認為,當工程師只要跟電腦對話就好,在轉職之前我也這麼認為的,尤其是以前在服務業工作,從早到晚跟客戶對談、處理他們各種疑難雜症和情緒的過程,實在太容易讓我感到心累了,倒不如整天跟電腦對話,對錯很明顯,也不用顧及雙方情緒,肯定比處理客訴簡單
Thumbnail
2024/09/04
第三次月會來了!這個月的主題是「工程師的溝通秘訣」 很多人認為,當工程師只要跟電腦對話就好,在轉職之前我也這麼認為的,尤其是以前在服務業工作,從早到晚跟客戶對談、處理他們各種疑難雜症和情緒的過程,實在太容易讓我感到心累了,倒不如整天跟電腦對話,對錯很明顯,也不用顧及雙方情緒,肯定比處理客訴簡單
Thumbnail
2024/07/24
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
Thumbnail
2024/07/24
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
Thumbnail
2024/05/22
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
Thumbnail
2024/05/22
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
Thumbnail
看更多
你可能也想看
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
TypeScript是一種由Microsoft開發和維護的開源編程語言。它是JavaScript的超集,主要擴展了JavaScript的語法,增加了靜態類型檢查和其他特性,使得開發大型應用程序更為方便和可靠。
Thumbnail
TypeScript是一種由Microsoft開發和維護的開源編程語言。它是JavaScript的超集,主要擴展了JavaScript的語法,增加了靜態類型檢查和其他特性,使得開發大型應用程序更為方便和可靠。
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
這些章節的目的是為了介紹JavaScript中的各種數據類型,包括基礎類型和物件類型,以及如何將數據從一種類型轉換為另一種類型。此外,還介紹了如何創建自定義類型,以及如何使用JavaScript中的陣列、集合和字典。
Thumbnail
這些章節的目的是為了介紹JavaScript中的各種數據類型,包括基礎類型和物件類型,以及如何將數據從一種類型轉換為另一種類型。此外,還介紹了如何創建自定義類型,以及如何使用JavaScript中的陣列、集合和字典。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
Thumbnail
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News