WebStorm 6中的闭包编译器注释,如何使用记录类型

Closure Compiler annotations in WebStorm 6, how to use Record Types?

本文关键字:何使用 记录 类型 注释 编译器 闭包 WebStorm      更新时间:2023-09-26

以下功能正常:

/**
 * Test
 * @param {{ aRandomKey: string, anotherKey  }} data
 */
function test(data) {
    console.log(data.aRandomKey);
}

这里data.aRandomKey被识别为有效参数。

现在问题出现在以下方面:

/**
 * @param { string, function({{ pageId: string }} data) }
 */
socket.on('page:getSource', function (data) {
    //data = { pageId: id }
    console.log(data.pageId)
})

此处,data.pageId未解析。。并且CCD_ 3语法也是错误的。

同样适用于:

socket.on('page:getSource',
    /**
    * @param {{ pageId: string }} data
    */
    function (data) {
        //data = { pageId: id }
        console.log(data.pageId)
    }
)

所以。。我该如何处理这些情况?

第一个示例注释错误地应用于socket.on,而不是回调函数。此外,注释的格式不正确。@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)
    }
);