Как заставить компилятор Closure перестать жаловаться на типы объединения при вызове функции?

Я вижу это в частности при использовании файла externs jQuery-1.4.3. В javadocs для этого написано

/**
 * @param {(string|number|function(number,number))=} arg1
 * @return {(number|jQueryObject)}
 * @nosideeffects
 */
jQueryObject.prototype.width = function(arg1) {};

У меня есть вызов, который выглядит следующим образом:

   var w =  $(window).width();
    $('#whatever').width(w)

Closure жалуется: ВНИМАНИЕ - фактический параметр 1 jQueryObject.prototype.height не соответствует формальному параметру найдено: (jQueryObject | null | number) требуется: (функция (число, число):? | число | строка | неопределено) $ ('# Xobni'). Height ($ (window) .height ());

Поигравшись (удалив возможные типы возврата), я вижу, что проблема в том, что первый вызов width может возвращать, возможно jQueryObject, и поскольку это недопустимый ввод, Closure выдает мне ошибку. Я попытался добавить это:

/**
 * @type {number}
 */
var w =  $(window).width();
$('#Xobni').width(w);

Но затем Closure жалуется: ВНИМАНИЕ - инициализация переменной найдено: (jQueryObject | null | number) требуется: номер var w = $ (window) .width ();

Проблема в том, что когда width принимает аргумент, он возвращает jQueryObject. Когда он не принимает аргумент, он возвращает число. Итак, я знаю, что с моим вызовом все в порядке, но javadocs не совсем это отражает, поэтому Closure предупреждает меня. Есть ли способ исправить javadocs соответствующим образом или способ сообщить Closure, что я знаю, что этот результат будет числом. Я знаю, что, вероятно, смогу подавить ошибку, но я хотел бы знать, как лучше аннотировать эти вещи.

Спасибо за помощь!

10
задан Mr. Ubin 28 October 2010 в 00:56
поделиться