[英]Is there a way to use an enum as type in Google Closure Compiler?
我嘗試過像@param {window.MyNamespace.MyEnum} myVar
這樣的東西,但編譯器抱怨JSC_TYPE_PARSE_ERROR: Bad type annotation. Unknown type window.MyNamespace.MyEnum
JSC_TYPE_PARSE_ERROR: Bad type annotation. Unknown type window.MyNamespace.MyEnum
。
我應該在枚舉上做@typedef
,還是只使用@param {number}
,如果我的枚舉是@enum {number}
? 我真的更喜歡enum的東西,因為其他值並不是真正允許的。
(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 || {})
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) {};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.