學習紀錄 | 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
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
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News