Почему компилятор Closure не распознает объявления типов внутри самоисполняющейся анонимной функции?

Я получаю много предупреждений "Неизвестный тип" при запуске довольно большой библиотеки через 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.
13
задан Shad 3 March 2011 в 05:52
поделиться