2011-05-10 16 views
6

El compilador de Cierre de Google tiene una etiqueta "@typedef", pero ¿está bien utilizarlas en su código? (Sé que va a trabajar, pero ¿es mal visto?)Uso de la etiqueta @typedef de Google Closure

Así que aquí es mi tipo

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

y luego puedo usar ese tipo en mis anotaciones jsdoc.

Esto permite a mi IDE dame autocompletar en el parámetro pasado

lo tanto, el objeto declarado no se utiliza en cualquier parte del código.

 
/** 
* 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. 
} 

¿Esto es así? ¿O hay una mejor solución?

Respuesta

6

Esto está bien. También puede utilizar un tipo de registro para permitir la comprobación de tipos adicionales con el compilador:

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

+1

También es útil para uniones: '/ ** @typdef {string | number | boolean} */var myType;' –

7

@typedef se utiliza para definir un tipo, no marcar un objeto como un cierto tipo. Si desea marcar una cierta variable como un tipo determinado, use la anotación @type {<type>}.

@typedef se utiliza para definir los tipos de "mano corta" para su uso con constructos @type {...}.

Tenga en cuenta que las propiedades de los objetos no están tipeadas actualmente en el compilador de cierre, incluso si están marcadas, pero pueden estarlo en el futuro.

Cuestiones relacionadas