4

のようなことをしようとしまし@param {window.MyNamespace.MyEnum} myVarたが、コンパイラは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 || {})
4

1 に答える 1

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) {};
于 2013-08-12T16:47:52.120 に答える