JSDoc 書き方

メソッド・関数へのコメント

/** 
 * 関数の説明
 * @param {number|string} hoge パラメータの説明
 * @param {string} [fuga] 任意の場合は [] がつく。
 * @param {string} [fuga2='fuga'] 任意かつ未指定の場合の初期値が決まっている
 * @return {boolean} 〇〇か否か 
 */

データ型の書き方いろいろ

/**
 * @param {string|number} 文字列もしくは数値
 * @param {string[]} hoge_ary その型の配列の場合
 * @param {Object} user_info ユーザ情報
 * @param {Object} user_info.name ユーザ名
 * @param {Object} user_info.email ユーザのアドレス
 * @param {Array.<MyClass>} MyClassインスタンスの配列
 * @param {Object.<string, number>} 文字列キーと数値を持つオブジェクト
 * @param {Object} myObj プロパティ 'a'(数値)、 'b'(文字列)、 'c'(任意の型)を持つ 'myObj'というオブジェクト。
 * @param {number} myObj.a
 * @param {string} myObj.b
 * @param {} myObj.c
 * @param {【名前空間】#【メンバ】} 名前空間のインスタンス メンバ
 * @param {【名前空間】.【メンバ】} 名前空間のスタティック メンバ
 * @param {【名前空間】~【メンバ】} 名前空間の内部 メンバ
 */

静的プロパティリスト

/**
 * @namespace
 * @property {object} user_info
 * @property {number} user_info.id
 * @property {string} user.info.name
 * @property {object} user.info.skills
 * @property {number} user.info.skills.html
 * @property {number} user.info.skills.css
 */
var setting= {
    user_info: {
        id: 1,
        name: '名前',
        skills: {
            html: 0,
            css: 1
        }
    }
};

コールバック

/**
 * メソッド
 * @param {CallbackName} callback コールバック関数
 */
var doSomething = function(callback){

};

/**
 * コールバック関数の説明
 * @callback CallbackName
 * @param {number} hoge 説明
 * @param {string} fuga 説明
 */

イベント

使いこなせる気がしないな…

/**
 * Throw a snowball.
 * イベントをキックする関数
 * @fires Hurl#snowball キックされるイベント名
 */
Hurl.prototype.snowball = function() {
    /**
     * Snowball event.
     * 
     * @event Hurl#snowball 発火するイベント
     * @type {object} イベントに渡される情報
     * @property {boolean} isPacked - Indicates whether the snowball is tightly packed.
     */
    this.emit('snowball', {
        isPacked: this._snowball.isPacked
    });
};

独自の型定義

/**
 * @typedef PropertiesHash
 * @type {object}
 * @property {string} id - an ID.
 * @property {string} name - your name.
 * @property {number} age - your age.
 */

/** @type {PropertiesHash} */
var props;

他に使いそうな書き方

/**
 * @see 依存する関数やクラス
 * @listens この関数が期待するイベント
 */