9

Tôi thấy điều này đặc biệt khi sử dụng tệp externs jQuery-1.4.3. Các javadocs cho mà đọcLàm thế nào để Trình biên dịch đóng cửa ngừng phàn nàn về các loại công đoàn khi gọi một hàm?

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

Tôi có một cuộc gọi mà trông như thế này:

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

Đóng cửa phàn nàn: CẢNH BÁO - tham số thực tế 1 của jQueryObject.prototype.height không phù hợp với thông số chính thức tìm thấy : (jQueryObject | null | số) bắt buộc: (hàm (số, số):? | số | chuỗi | không xác định) $ ('# Xobni'). height ($ (window) .height());

Khi chơi xung quanh (loại bỏ các kiểu trả về có thể), tôi có thể thấy rằng vấn đề đầu tiên là chiều rộng có thể trả về có thể là jQueryObject, và vì đó không phải là đầu vào hợp lệ, Closure cho tôi một lỗi. Tôi đã cố gắng thêm này:

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

Nhưng sau đó đóng cửa phàn nàn: CẢNH BÁO - khởi tạo biến tìm thấy: (jQueryObject | rỗng | số) yêu cầu: số var w = $ (window) .width();

Vấn đề là khi chiều rộng lấy một đối số, nó trả về một jQueryObject. Khi không lấy một đối số, nó trả về một số. Vì vậy, tôi biết cuộc gọi của tôi là okay, nhưng javadocs không hoàn toàn phản ánh điều đó, và vì vậy Closure đang cảnh báo tôi. Có cách nào để sửa chữa các javadocs một cách thích hợp hoặc một cách để nói với Closure tôi biết kết quả này sẽ là một số. Tôi biết tôi có thể có thể ngăn chặn các lỗi, nhưng tôi muốn biết làm thế nào để chú thích những điều này tốt hơn.

Cảm ơn sự giúp đỡ!

Trả lời

8

Bạn có thể ghi đè này như sau:

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

Điều đó hoạt động hoàn hảo. Cảm ơn! Nó thậm chí hoạt động nội tuyến, nếu tôi sử dụng: $ ('# bất cứ điều gì'). Width (/ ** @type {number} */$ (cửa sổ) .width()); –

1

Hãy thử điều này:

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

hay này:

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

Cảm ơn! Đó là thực sự những gì tôi đã làm để vượt qua vấn đề này, nhưng bài viết của nullptr cung cấp một sửa chữa tốt đẹp mà không liên quan đến bất kỳ cơ chế thời gian chạy. –

Các vấn đề liên quan