如何使用jsdoc在webstorm中记录类型?

时间:2013-05-17 13:03:34

标签: javascript webstorm jsdoc

当我编写以下代码时,注释器告诉我BrowserSelector未在第二个typedef中定义:

/**
 * @typedef {{name: String, minVer: Number, maxVer: Number}} BrowserSelector
 */

/**
 * @typedef {{type:String, browser: BrowserSelector, attribute: Object}} Selector
 */

我认为它没有将类型与名称相关联。我怎样才能做到这一点?

我不想为它添加实际代码,只需添加jsdoc注释。

3 个答案:

答案 0 :(得分:20)

我正在将这种评论风格用于'struct'之类的类型:

/**
 * @name BrowserSelector
 * @property {String} name
 * @property {Number} minVer
 * @property {Number} maxVer
 */

/** @type {BrowserSelector|*} */
var mySelector = {}; // no warning because of '*' in @type :S
mySelector.name = 'foo'; // no warning :)
mySelector.id = 'bar'; // warning :)

答案 1 :(得分:11)

从Webstorm 7(可能更早)开始,不需要多条评论来描述属性。

/**
 * @name BrowserSelector
 * @type {{
 *     name: String,
 *     minVer: Number,
 *     maxVer: Number
 * }}
 */

答案 2 :(得分:8)

我最近在AngularJS源代码中注意到,他们还注释了没有任何直接附加代码的东西。我在你的案例中尝试了相同的原则,并提出了以下内容(甚至代码完成和类型检查在WebStorm中使用它):

/**
 * @name BrowserSelector
 */
/**
 * @name BrowserSelector#name
 * @type {string}
 */
/**
 * @name BrowserSelector#minVer
 * @type {number}
 */
/**
 * @name BrowserSelector#maxVer
 * @type {number}
 */

/**
 * @name Selector
 */
/**
 * @name Selector#type
 * @type {string}
 */
/**
 * @name Selector#browser
 * @type {BrowserSelector}
 */
/**
 * @name Selector#attribute
 * @type {Object}
 */