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. }
这样可以吗?或者有更好的解决方案吗?
答案 0 :(得分:7)
这很好。您还可以使用记录类型来启用编译器的其他类型检查:
/**
* @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 :(得分:7)
@typedef
用于定义类型,而不是将对象标记为特定类型。如果要将某个变量标记为特定类型,请使用@type {<type>}
注释。
@typedef
用于定义“短手”类型,以便与@type {...}
构造一起使用。
请注意,对象的属性当前未在Closure Compiler中输入,即使已标记,但可能在将来。
答案 2 :(得分:0)
typedef是用于创建类型的,因此不愿意将其用作名称空间(向其分配对象文字)。不久前,我写了blog post关于各种typedef陷阱。