2013-05-17 7 views
18

Kiedy piszę poniższego kodu spowoduje adnotator mówi mi, że BrowserSelector nie jest zdefiniowana w drugim typedef:Jak mogę udokumentować typ w webstormu używając tylko jsdoc?

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

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

Uważam, że nie jest skojarzenie typu z nazwą. Jak mogę to zrobić?

Wolałbym nie dodawać rzeczywistego kodu, tylko komentarze jsdoc.

+2

Od v10.0.4 [ '@ typedef' wciąż wydaje złamane w WebStorm] (https : //youtrack.jetbrains.com/issue/WEB-11189). –

Odpowiedz

19

Używam tego komentarza styl 'struktury' podobnego rodzaju:

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

To jest struktura, której obecnie używam, ponieważ Webstorm v8 nadal nie rozumie @typedef. –

+0

Podobno [naprawiono @typedef została naprawiona] (https://youtrack.jetbrains.com/issue/WEB-11189), ale okazało się, że nadal nie działa w WebStorm 10.0.4. –

8

Niedawno zauważyłem w kodzie źródłowym AngularJS, że również opisywały rzeczy bez żadnego bezpośrednio dołączonego kodu. Próbowałem tę samą zasadę w danej sprawie i wpadł na następujący (nawet Podpowiedzi i wpisz sprawdzanie prac z nim 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

Wygląda na to, że \ @propertyOf nie jest potrzebny, wywodzi się z \ @name, Webstorm 6.0.2 –

11

wielu komentarzy do opisania właściwości nie jest konieczne, ponieważ od Webstorm 7 (być może wcześniej).

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

Czy istnieje sposób na skomentowanie tego formatu, aby opisać, co oznacza lub jest używane? – Snekse

Powiązane problemy