В следующем примере кода генерируется предупреждение компилятора о расширенной оптимизации: «JSC_UNSAFE_NAMESPACE: создан неполный псевдоним для пространства имен NS». Если я удалю комментарий @enum, он не выдаст предупреждение.
var NS = {};
/**
* @enum {string}
*/
NS.type = {
FOO : 'bar'
};
NS.foobar = function(){ alert(NS.type.FOO); };
window['NS'] = NS;
window['NS']['foobar'] = NS.foobar;
Экспорт только функции, а не пространства имен также работает:
window['NS_foobar'] = NS.foobar;
Что я делаю не так? Это можно обойти? Я бы предпочел не включать библиотеку Closure, если это возможно.