2011-05-10 65 views
6

Google的Closure編譯器有一個「@typedef」標記,但是可以在代碼中使用它們嗎? (我知道它會工作,但它不贊成?)使用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註釋使用該類型。

這讓我的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. 
} 

那麼這可以嗎?還是有更好的解決方案?

回答

6

這很好。你也可以使用一個記錄類型,以使更多的類型檢查的編譯器:

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

這對工會也很有用:'/ ** @typdef {string | number | boolean} */var myType;' – 2013-05-20 13:51:24

7

@typedef用於定義一個類型,沒有標記的對象爲某一類型。如果您想將某個變量標記爲某種類型,請使用@type {<type>}註釋。

@typedef用於定義用於@type {...}構造的「短手」類型。

請注意,對象的屬性當前未在Closure Compiler中輸入,即使標記了,但可能在將來。