Как я могу документировать тип в webstorm, используя только jsdoc?

когда я пишу следующий код, аннотатор говорит мне, что BrowserSelector не определено во втором typedef:

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

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

Я считаю, что он не связывает тип с именем. Как я могу это сделать?

Я бы предпочел не добавлять фактический код для него, просто комментарии jsdoc.

3 ответов


Я использую этот стиль комментариев для "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 :)


несколько комментариев для описания свойств не требуется с Webstorm 7 (возможно, ранее).

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

недавно я заметил в исходном коде 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}
 */