Я вижу это в частности при использовании файла 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, что я знаю, что этот результат будет числом. Я знаю, что, вероятно, смогу подавить ошибку, но я хотел бы знать, как лучше аннотировать эти вещи.
Спасибо за помощь!