2016-10-06 2 views
2

Например, у меня есть описание объекта с помощью @name:Как определить JSDoc для такого объекта?

/** 
@name Point 
@prop {number} x 
@prop {number} y 
*/ 

и объект, где каждое свойство является точка:

/** 
* 
* @type {what?} 
*/ 
var details = { 
    something: {x:1.1, y: 2.2}, 
    another: {x:1.1, y: 2.2}, 
    theRest: {x:1.1, y: 2.2}, 
    more: {x:1.1, y: 2.2}, 
    yetAnother: {x:1.1, y: 2.2} 
}; 

Какой она должна быть? Можно ли задавать тип только значениями свойств без ключей? Потому что я собираюсь добавлять/удалять свойства даже на лету, но все значения всегда будут Point.

Можно ли описать использование jsDoc?

ответ

1

Как я понимаю, существуют два подхода к определению ключей и типов объектов в JSDocs.

JSDocs, как определено usejsdoc.com использует @property:

/** 
    @typedef PropertiesHash 
    @type {object} 
    @property {string} id - an ID. 
    @property {string} name - your name. 
    @property {number} age - your age. 
/

/** @type {PropertiesHash}/
var props; 

Где, как при использовании в Google, в частности, с Google Closure предпочитает {{key:(type)}} структуру:

/** 
* A typedef to represent a CSS3 transition property. Duration and delay 
* are both in seconds. Timing is CSS3 timing function string, such as 
* 'easein', 'linear'. 
* 
* Alternatively, specifying string in the form of '[property] [duration] 
* [timing] [delay]' as specified in CSS3 transition is fine too. 
* 
* @typedef { { 
* property: string, 
* duration: number, 
* timing: string, 
* delay: number 
* } | string } 
*/ 
goog.style.transition.Css3Property; 

Чтобы ответить на ваш вопрос прямо, это звучит как вы не знаете всех своих ключей, поэтому вам придется использовать более простое определение.

/** @type {Object<string, Point>} */ 

или стенография;

/** @type {Object<Point>} */ 
Смежные вопросы