我尝试过像@param {window.MyNamespace.MyEnum} myVar
这样的事情,但是编译器抱怨JSC_TYPE_PARSE_ERROR: Bad type annotation. Unknown type window.MyNamespace.MyEnum
。
如果我的枚举是@typedef
,我应该在枚举上做@param {number}
,还是只使用@enum {number}
?我真的更喜欢枚举,因为其他值并不是真正允许的。
(function (MyNamespace) {
/**
* @enum {number}
*/
MyNamespace.MyEnum = {
FOO: 1,
BAR: 2,
BAZ: 3
}
/**
* @constructor
* @param {Object} foo
*/
MyNamespace.MyClass = function (foo) {
this.foo = foo
}
/**
* @constructor
* @param {MyNamespace.MyClass} bar
*/
MyNamespace.MyOtherClass = function (bar) {
this.bar = bar
}
/**
* @param {MyNamespace.MyEnum} baz
*/
MyNamespace.MyOtherClass.prototype.someMethod = function (baz) {
}
})(window.MyNamespace = window.MyNamespace || {})
答案 0 :(得分:4)
Closure-compiler不支持使用函数参数的别名类型。编译后使用--output_wrapper
标志封装代码。以下代码正确编译:
/** @const */
var MyNamespace = window.MyNamespace || {};
/** @enum {number} */
MyNamespace.MyEnum = {
FOO: 1,
BAR: 2,
BAZ: 3
};
/**
* @constructor
* @param {Object} foo
*/
MyNamespace.MyClass = function (foo) {
this.foo = foo
};
/**
* @constructor
* @param {MyNamespace.MyClass} bar
*/
MyNamespace.MyOtherClass = function (bar) {
this.bar = bar
};
/** @param {MyNamespace.MyEnum} baz */
MyNamespace.MyOtherClass.prototype.someMethod = function (baz) {};