18

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

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

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

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

我宁愿不为其添加实际代码,只添加 jsdoc 注释。

4

3 回答 3

20

我将这种注释样式用于类似“结构”的类型:

/**
 * @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 :)

于 2013-10-31T08:19:19.643 回答
12

从 Webstorm 7(可能更早)开始,不需要多个注释来描述属性。

/**
 * @name BrowserSelector
 * @type {{
 *     name: String,
 *     minVer: Number,
 *     maxVer: Number
 * }}
 */
于 2013-10-02T15:45:15.760 回答
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}
 */
于 2013-05-20T20:17:04.507 回答