[英]passing defines through Java to the Google Closure Compiler
[英]google closure compiler annotations for passing enums
我似乎找不到正确的闭包编译器注释来传递枚举映射。
例如:给定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
客户端WARNING - Property EA never defined on String
上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>}
此代码可通过在线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.