2

以下功能是可以的:

/**
 * 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未解决..@param语法也是错误的。

同样适用于:

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

那么..我该如何处理这些情况?

4

1 回答 1

1

第一个示例,注释错误地应用于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)
    }
);
于 2013-08-11T13:56:18.530 回答