Javascript WebStorm 6中的闭包编译器注释,如何使用记录类型?
以下功能正常:Javascript WebStorm 6中的闭包编译器注释,如何使用记录类型?,javascript,annotations,anonymous-function,google-closure-compiler,Javascript,Annotations,Anonymous Function,Google Closure Compiler,以下功能正常: /** * Test * @param {{ aRandomKey: string, anotherKey }} data */ function test(data) { console.log(data.aRandomKey); } 此处数据。aRandomKey被识别为有效参数 现在的问题是: /** * @param { string, function({{ pageId: string }} data) } */ socket.on('page:
/**
* Test
* @param {{ aRandomKey: string, anotherKey }} data
*/
function test(data) {
console.log(data.aRandomKey);
}
此处数据。aRandomKey
被识别为有效参数
现在的问题是:
/**
* @param { string, function({{ pageId: string }} data) }
*/
socket.on('page:getSource', function (data) {
//data = { pageId: id }
console.log(data.pageId)
})
此处,data.pageId
未解析。。而且@param
语法也是错误的
这同样适用于:
socket.on('page:getSource',
/**
* @param {{ pageId: string }} data
*/
function (data) {
//data = { pageId: id }
console.log(data.pageId)
}
)
所以。。如何处理这些情况?第一个示例是注释错误地应用于
套接字。在
上,而不是回调函数。此外,注释的格式不正确。@param标记只描述一个参数及其类型。你试图描述两种情况。而且,记录类型只需要一组大括号就可以了。以下是一种可能的方式:
/**
* @param {string} eventName,
* @param {function({ pageId: string })} callback
*/
socket.on = function(eventName, callback) {};
socket.on('page:getSource', function (data) {
//data = { pageId: id }
console.log(data.pageId)
});
您的第二个示例似乎正确-但由于未提供socket.on
定义,因此无法验证。下面是一个类似的测试用例,它确实有效:
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @warning_level VERBOSE
// @formatting pretty_print
// ==/ClosureCompiler==
function test2(a, b) {
b(a);
}
test2({pageId: 17},
/**
* @param {{ pageId: string }} data
*/
function (data) {
//data = { pageId: id }
console.log(data.pageId)
}
);
解决方法是提取函数并为其命名。。但是我宁愿不这样做,这是WebStorm的问题,因为您的第二个示例在这里不起作用。它仅在我命名函数时有效,例如
/**param{{{pageId:string}}data*/var f=function(data){..}
和test2({pageId:17},f)