簡體   English   中英

有沒有辦法在Google Closure Compiler中使用枚舉作為類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM