我似乎找不到正确的闭包编译器注释来传递枚举映射。
例如:给定EventTargets A
,B
具有:
/** @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>}