Использование тега @typedef Google Closure - PullRequest
7 голосов
/ 10 мая 2011

У компилятора Google Closure есть тег "@typedef", но можно ли использовать их в своем коде?(Я знаю, что это будет работать, но не одобряется ли это?)

Итак, вот мой тип

/**
 * The plan object's typedef
 * @typedef {Object}
 */
Types.Plan = {
    "style": "bordersmall",
    "width": "50%",
    "height": "40%",
    "x": "20%",
    "y": "10%",
    "clickable": true,
    "moveable": true
};

И затем я могу использовать этот тип в моих аннотациях JSDoc.1007 * Это позволяет моей среде IDE автоматически заполнять переданный параметр

Таким образом, объявленный объект нигде в коде не используется.

/**
 * The Instructions class
 * @param   {Types.Plan}    plan        Plan for position and dimension
 * @param   {Manager}       manager     The manager
 * @param   {Instructions}  parent      This widget's parent's instructions
 * @return  {Instructions}              Returns the new instructions object
 */
Instructions = function(plan, manager, parent){
    plan.
}

Так это нормально?Или есть лучшее решение?

Ответы [ 3 ]

7 голосов
/ 11 мая 2011

@typedef используется для определения типа, а не для обозначения объекта как определенного типа.Если вы хотите пометить определенную переменную как определенный тип, используйте аннотацию @type {<type>}.

@typedef используется для определения «сокращенных» типов для использования с конструкциями @type {...}.

Помните, что свойства объектов в настоящее время не вводятся в Closure Compiler, даже если они отмечены, но могут быть в будущем.

7 голосов
/ 11 мая 2011

Это нормально. Вы также можете использовать тип записи, чтобы включить дополнительную проверку типов с помощью компилятора:

/**
 * @typedef {{
 *   style: string, 
 *   width: string, 
 *   height: string, 
 *   x: string, 
 *   y: string, 
 *   clickable: boolean, 
 *   moveable: boolean
 * }} 
 */
var myType = ...

http://code.google.com/closure/compiler/docs/js-for-compiler.html#types

0 голосов
/ 24 декабря 2018

Typedef предназначен для создания типа, поэтому он не одобряет также использование его в качестве пространства имен (назначьте ему литерал объекта). Я написал сообщение в блоге о различных подводных камнях typedef некоторое время назад.

...