Я получаю много предупреждений "Неизвестный тип"
при запуске довольно большой библиотеки через Closure Compiler, и они, кажется, возникают, когда мои типы объявляются в самоисполняющихся анонимных функциях . В этом нет ничего экзотического, но если я уберу самовыполняющиеся функции, объявления типов будут работать (по крайней мере, в этом простом тесте).
Я не уверен, что что-то не так с аннотациями моего кода или если в коде есть что-то незаконное, но я думаю, что все это кошерный и стандартный способ модульности API.
Следующий тестовый код создает пространство имен (просто старый простой объект JS) и присоединяет к нему перечисление (литерал объекта) и функцию.
var mynamespace = {};
(function (mynamespace) {
/**
* Some enum.
* @enum {number}
*/
mynamespace.SomeEnum = {
FOO: 1,
BAR: 2
};
/**
* Frazzle some type.
* @param {mynamespace.SomeEnum} qux The type to frazzle.
* @return {boolean} whether the operation succeeded.
*/
mynamespace.frazzle = function(qux) {
return true;
}
}(mynamespace));
// call it
mynamespace.frazzle(mynamespace.SomeEnum.FOO);
Выглядит нормально, правда? Ошибки компилятора закрытия:
[jscomp] Compiling 1 file(s) with 37 extern(s)
[jscomp] X:\dev\solclientjs\sdk\tools\jscomptest.js:14: WARNING - Parse error. Unknown type mynamespace.SomeEnum
[jscomp] * @param {mynamespace.SomeEnum} qux The type to frazzle.