Closure编译器:无法在回调时确定此表达式的类型

时间:2014-01-12 20:14:59

标签: javascript google-closure-compiler

我在param回调中使用WARNING - could not determine the type of this expression时收到.apply。让我举例说明一下。我有这段代码:

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

在我的代码中,我需要在.apply上设置callback并获取它返回的内容。但Closure Compiler给我错误。我需要使用java -jar compiler.jar --js test.js --js_output_file test.min.js --warning_level VERBOSE --jscom_warning reportUnknownTypes运行它。

请注意,我强制警告所有未知类型,但callback类型为function(... [*]),并且它具有正确的.apply方法(由于您的类型,在CC内部定义)。如果我运行代码,它在浏览器上完美运行。

可能是Closure Compiler的错误吗?

我尝试过的事情

  • @param {*} callback:错误;
  • @param {function(*)} callback:错误;
  • return /** @type {function(... [*])} */ (callback).apply(null, [name]);:错误;
  • return (/** @type {function(... [*])} */ (callback)).apply(null, [name]);:错误;

1 个答案:

答案 0 :(得分:1)

根据Concavel,在Closure Compiler问题跟踪器的issue #1191上,到@param回调,您需要指定回调返回如下:

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

它真的解决了这个问题。