【问题标题】:How can I document a type in webstorm using just jsdoc?如何仅使用 jsdoc 在 webstorm 中记录类型?
【发布时间】:2013-05-17 13:03:33
【问题描述】:

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

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

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

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

我不想为其添加实际代码,只添加 jsdoc cmets。

【问题讨论】:

标签: javascript webstorm jsdoc


【解决方案1】:

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

/**
 * @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 v8 似乎仍然无法理解@typedef。
  • 据称,`@typedef support was fixed 但我发现它在 WebStorm 10.0.4 中仍然无法正常工作。
【解决方案2】:

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

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

【讨论】:

  • 有没有办法评论这种格式来描述名称的含义或用途?
【解决方案3】:

我最近在 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}
 */

【讨论】:

  • 貌似不需要\@propertyOf,是从\@name推断出来的,webstorm 6.0.2
猜你喜欢
  • 2022-06-28
  • 1970-01-01
  • 2019-02-03
  • 2013-04-07
  • 1970-01-01
  • 2013-05-22
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多