Я получаю много "Unknown type"
предупреждений при запуске довольно большой библиотеки через Closure Compiler, и они, кажется, появляются, когда мои типы объявляются в самозапускающихся анонимных функциях.В этом нет ничего экзотического, но если я уберу самовыполняющиеся функции, объявления типов, похоже, будут работать (по крайней мере, в этом простом тесте).
Я не уверен, что с моим кодом что-то не таканнотации или если в коде есть что-то недопустимое, но я думаю, что это все кошерный и стандартный способ модуляции API.
Следующий тестовый код создает пространство имен (просто старый старый объект JS) и присоединяетenum (литерал объекта) и функция к нему.
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.