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

例如:给定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

最佳答案

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>}

10-08 04:46