2013-05-17 1 views
18

Когда я пишу следующий код, комментатор говорит мне, что BrowserSelector не определена во втором ЬурейеГо:Как я могу документировать тип в webstorm, используя только jsdoc?

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

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

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

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

+2

По v10.0.4, [ '@ typedef' еще кажется сломанной в WebStorm] (HTTPS : //youtrack.jetbrains.com/issue/WEB-11189). –

ответ

19

Я использую этот комментарий стиль '' структуры как типы:

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

+0

Это структура, которую я использую в настоящее время, потому что Webstorm v8 по-прежнему не понимает @typedef. –

+0

Утверждается, что ['@typedef поддержка была исправлена] (https://youtrack.jetbrains.com/issue/WEB-11189), но я обнаружил, что он все еще не работает в WebStorm 10.0.4. –

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} 
*/ 
+1

Кажется, что \ @propertyOf не требуется, это выводится из \ @name, webstorm 6.0.2 –

11

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

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

Есть ли способ прокомментировать этот формат, чтобы описать, для чего используется или используется значение имени? – Snekse