Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebStorm 6中的闭包编译器注释,如何使用记录类型?_Javascript_Annotations_Anonymous Function_Google Closure Compiler - Fatal编程技术网

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)