如何消除Google Closure Compiler的“expressions are not callable”警告?
解决Google Closure Compiler的"expressions are not callable"警告
嘿,这个问题我之前也碰到过!Closure Compiler的类型检查特别严格,它没法自动识别request模块导出的是可调用函数,所以才会抛出这个警告。下面给你两个实用的解决办法:
方法1:添加类型注释(最直接高效)
在声明request变量的时候,给它加上Closure Compiler能识别的类型注释,明确告诉编译器这是一个可调用的函数。
修改后的代码如下:
/** @type {function(Object, function(Error, Object, string): void)} */ var request = require('request'); request({ url: "https://www.googleapis.com/oauth2/v4/token", method: "POST", json: false, body: tokenPostData, headers: { "content-type": "application/x-www-form-urlencoded" }, }, function (error, response, body) { // 你的回调逻辑 });
这个注释的作用拆解:
@type用于指定变量的类型function(Object, ...)表明这是一个接受两个参数的函数:第一个是请求配置对象,第二个是回调函数- 回调函数的类型
function(Error, Object, string): void,表示它接受三个参数(错误对象、响应对象、响应体字符串),且没有返回值
方法2:使用externs文件(适合大型项目)
如果你的项目里频繁用到request模块,可以创建一个externs文件来全局定义它的类型,避免每个文件重复加注释。比如创建request.externs.js:
/** * @param {Object} options 请求配置参数 * @param {function(Error, Object, string): void} callback 回调函数 * @return {void} */ function request(options, callback) {}
然后在编译时指定这个externs文件:
google-closure-compiler --externs=request.externs.js 你的源代码文件
这样编译器就能全局识别request的类型,不再抛出警告。
内容的提问来源于stack exchange,提问作者Johann
相关产品推荐
相关产品推荐

