我似乎无法找到正确的闭包编译器注释来传递枚举图。
例如:给出EventTargets B
,/** @enum {string} */
MYNS.A.EventType = {EA : 'ea1'};
/** @enum {string} */
MYNS.B.EventType = {EB : 'eb2'};
:
C
我有一个构造函数/** @return {WHATSTHIS} */
C.prototype.getEventTypesAB = function() {
return {
A: MYNS.A.EventType,
B: MYNS.B.EventType
};
};
,它返回多个EventTypes:
goog.events.listen(parent, c.getEventTypesAB().A.EA, ...);
稍后使用:
enum
我已经尝试了一些如下所示的内容,我认为这不会起作用type
不是/** @typedef {{ A: MYNS.A.EventType, B: ... }} */
,但我不知道如何注释这个:
WARNING - Property EA never defined on String
我总是最终得到(预期的)编译器警告:frame.X = frame.X <= 0 ? 0 : frame.X;
frame.X = frame.X + frame.Width > Image.Width ? Image.Width - frame.Width : frame.X;
frame.Y = frame.Y <= 0 ? 0 : frame.Y;
frame.Y = frame.Y + frame.Height > Image.Height ? Image.Height - frame.Height : frame.Y;
在客户端。
答案 0 :(得分:3)
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>}
答案 1 :(得分:-1)
此代码使用online Closure Compiler Service编译:
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