gpt4 book ai didi

javascript - jsdoc @typedef - 如何正确声明函数?

转载 作者:行者123 更新时间:2023-12-03 23:48:13 31 4
gpt4 key购买 nike

这是我的 jsdoc 声明。

我应该如何调整它,以便 MyNewType.logFirst属性实际引用 logFirst函数,我在下面注释了?

// my-new-type.js
/**
* MyNewType definition
* @typedef {Object} MyNewType
* @property {function} logFirst
* @property {function} logSecond
*/

/**
* @param {number} first
* @param {number} second
* @returns MyNewType
*/
module.exports = (first, second) => {
/**
* logs first argument
* @param {number} times
*/
function logFirst(times) {
for (let i = 0; i < times; i++) {
console.log(first);
}
}

/**
* logs second argument
* @param {number} times
*/
function logSecond(times) {
for (let i = 0; i < times; i++) {
console.log(second);
}
}

return {
logFirst,
logSecond
};
};

重要的是,我们保持这种“工厂”结构。

目前 - 这是我收到的:
enter image description here

我希望我的 IDE 绑定(bind) MyNewType.logFirstlogFirst定义。

最佳答案

除非我弄错了,否则我看不出赞成的解决方案如何工作。

没有什么像 @typedef {MyNewType} MyNewType在 JSDoc 中,而是 @typedef {Object} MyNewType (定义基本类型)(see docs)

此外,注释在给定的解决方案中都混杂在一起。例如,@param仅适用于函数参数和声明专用函数类型时 (see docs)

最后但同样重要的是,没有冒犯,但赞成的解决方案也是错误的,因为它混淆了 var MyNewType类型声明(具有两个参数的函数并返回具有两个属性的对象)和实际返回值声明(所述对象的两个属性)。除了不包括返回类型周围所需的括号。

编辑:哦,我忘了logFirst不是 number但是一个 Function ,这是OP同事提出的解决方案中的另一个错误。

我真的无法理解为什么人们会赞成这样一个 splinter 的解决方案......

我绝不是 JSDoc 方面的专家,但我认为 以下解决方案应该可以解决所有问题 ,对于新的 SO 访问者:

(注意:我不明白为什么我们需要两个不同的 typedef 用于 logFirst 和 logSecond 函数,因为它们具有完全相同的签名,但 JFF 我指定了两者)

/**
* Declare our "logFirst" type (which is a function)
*
* @callback TypeFnLogFirst
* @param {number} times
* @returns {void}
*/

/**
* Declare our "logSecond" type (which is a function)
*
* @callback TypeFnLogSecond
* @param {number} times
* @returns {void}
*/

/**
* Declare our returned type
*
* @typedef {Object} TypeObjTwoFns
* @property {TypeFnLogFirst} logFirst
* @property {TypeFnLogSecond} logSecond
*/

/**
* Declare our "MyNewType" type (which is a function)
* with two parameters
* and a return value (object literal of type TypeObjTwoFns)
* (==> where the magic happens)
* Note that "[at]typedef Function" is the same as "[at]callback" (as per the docs)
*
* @typedef {Function} TypeFnNewType
* @param {*} first
* @param {*} second
* @returns {TypeObjTwoFns}
*/

/** @type {TypeFnNewType} MyNewType */
var MyNewType = (first, second) => {
/** @type {TypeFnLogFirst} logFirst */
function logFirst(times) {
for (let i = 0; i < times; i++) {
console.log(first);
}
}

/** @type {TypeFnLogSecond} logSecond */
function logSecond(times) {
for (let i = 0; i < times; i++) {
console.log(second);
}
}

return {
logFirst,
logSecond
};
};

来源: JSDoc typedef,callback,paramJSDoc member,var,type

关于javascript - jsdoc @typedef - 如何正确声明函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53191739/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com