繁体   English   中英

用于传递枚举的Google闭包编译器注释

[英]google closure compiler annotations for passing enums

我似乎找不到正确的闭包编译器注释来传递枚举映射。

例如:给定EventTargets AB

/** @enum {string} */
MYNS.A.EventType = {EA : 'ea1'};

/** @enum {string} */
MYNS.B.EventType = {EB : 'eb2'};

我有一个构造函数C ,它返回多个EventType:

/** @return {WHATSTHIS} */
C.prototype.getEventTypesAB = function() {
  return {
    A: MYNS.A.EventType,
    B: MYNS.B.EventType
  };
};

稍后使用:

goog.events.listen(parent, c.getEventTypesAB().A.EA, ...);

我已经尝试了以下一些操作,但由于enum不是type ,所以我认为它不起作用,但是没有注释方法的想法:

/** @typedef {{ A: MYNS.A.EventType, B: ... }} */

我总是以(预期的)编译器警告结尾: WARNING - Property EA never defined on String客户端WARNING - Property EA never defined on StringWARNING - Property EA never defined on String

MYNS.A.EventType是一个对象,其键是字符串,其值是该枚举的成员。 所以你可以写

/** @type {!Object<string, MYNS.A.EventType>} */ var obj = MYNS.A.EventType

它会进行类型检查。 同样对于B。因此,您要返回的对象文字的类型是记录类型, {A: !Object<string, MYNS.A.EventType>, B: !Object<string, MYNS.B.EventType>}

此代码可通过在线Closure编译器服务进行编译

goog.provide("MYNS.A.EventType");
goog.provide("MYNS.B.EventType");
goog.provide("MYNS.C.ComboType");
goog.provide("MYNS.C");
/** @enum {string} */
MYNS.A.EventType = {EA : 'ea1'};
/** @enum {string} */
MYNS.B.EventType = {EB : 'eb2'};
/** @typedef {{ A: MYNS.A.EventType, B: MYNS.B.EventType }} */
MYNS.C.ComboType;
MYNS.C = function() {};
/** @return {!MYNS.C.ComboType} */
C.prototype.getEventTypesAB = function() {
  return {
    A: MYNS.A.EventType,
    B: MYNS.B.EventType
  };
};
var foo = new C();
var r = foo.getEventTypesAB();
console.log(r.A.EA);
console.log(r.B.EB);

我没有尝试运行生成的简单编译的代码,但似乎应该可以运行。 这是编译器提供的简单编译和漂亮的打印结果:

var MYNS = {A:{}, B:{}};
MYNS.A.EventType = {EA:"ea1"};
MYNS.B.EventType = {EB:"eb2"};
MYNS.C = function() {
};
C.prototype.getEventTypesAB = function() {
  return {A:MYNS.A.EventType, B:MYNS.B.EventType};
};
var foo = new C, r = foo.getEventTypesAB();
console.log(r.A.EA);
console.log(r.B.EB);

我认为您缺少的步骤是使用以下名称空间名称来定义类型:

/** @typedef {{ A: MYNS.A.EventType, B: MYNS.B.EventType }} */
MYNS.C.ComboType;

这就是该页面上显示的内容,我认为这是有关Google Closure语法最有用的页面:

https://developers.google.com/closure/compiler/docs/js-for-compiler#tags

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM