2015-01-21 3 views
1

В Google Closure JavaScript, я могу определить интерфейс для класса с чем-то вродеМогу ли я определить интерфейс для перечисления в Google Closure?

/** 
* An object that implements this does fantastic, wonderful things. 
* @interface 
*/ 
name.space.for.project.SomeInterface = {}; 

/** 
* Some method that does something. 
* @param {number} foo 
* @return {string} Some fantastic, wonderful string. 
*/ 
name.space.for.project.SomeInterface.prototype.doSomething = 
    function(foo) {}; 

Могу ли я как-то объявить интерфейс для перечисления, но не осуществлять перечисление? А затем реализовать перечисление в отдельном файле, как обычно? Как это?

/** 
* Enumerates event types. 
* @enum {string} 
* @implements {name.space.for.project.SomeEnum} 
*/ 
name.space.for.project.SomeEnum = { 
    FOO: 1, 
    BAR: 2 
}; 
+0

Непонятно здесь. Что здесь «как обычно»? Перечисление должно быть терминальным объектом, то есть оно должно иметь только перечисленные ключи значений в качестве свойств. – John

ответ

1

Это немного неясно, что вы sayingAre вы ищете Java-стиль нумерации, где перечисление объектов?

это возможно.

/** 
* An object that implements this does fantastic, wonderful things. 
* @interface 
*/ 
name.space.for.project.SomeInterface = {}; 

/** 
* Some method that does something. 
* @param {number} foo 
* @return {string} Some fantastic, wonderful string. 
*/ 
name.space.for.project.SomeInterface.prototype.doSomething = 
    function(foo) {}; 

/** 
* Enumerates event types. 
* @enum {name.space.for.project.SomeInterface} 
*/ 
name.space.for.project.SomeEnum = { 
    FOO: new name.space.for.project.SomeInterface(), 
    BAR: new name.space.for.project.SomeInterface() 
}; 
Смежные вопросы