2014-01-12 63 views
1

確定這個表達式的類型我收到WARNING - could not determine the type of this expression當我設置了一個param回調使用.apply。讓我舉例說明。我有這樣的代碼:Closure編譯器:不能在回調

/** 
* @param {function(... [*])} callback 
* @param {string} name 
*/ 
function call(callback, name) { 
    return callback.apply(null, [name]); 
    //  ^- error here. 
} 

在我的代碼,我需要.applycallback集上PARAM和得到什麼回報。但Closure編譯器給我錯誤。我需要java -jar compiler.jar --js test.js --js_output_file test.min.js --warning_level VERBOSE --jscom_warning reportUnknownTypes運行它。

注意,我強迫警告所有不明類型,但callback類型是function(... [*]),並正確有一個.apply方法(在CC內部定義的,因爲你的類型)。如果我運行代碼,它可以在瀏覽器上完美運行

它可以是一個封閉的編譯器錯誤,也許?

的事情,我想

  • @param {*} callback:錯誤;
  • @param {function(*)} callback:誤差;
  • return /** @type {function(... [*])} */ (callback).apply(null, [name]);:error;
  • return (/** @type {function(... [*])} */ (callback)).apply(null, [name]);:錯誤;

回答

0

與Concavel據,對issue #1191從關閉編譯問題跟蹤,以@param你需要指定喜歡的回調函數返回的回調:

/** @param {function(*): number} callback */ 

它真正解決問題。