使用 @typedef 定义特定的函数类型

5

我不知道这里有多少(如果有的话)与Google Closure相关,或者是否全部都是干净的jsdoc,但是我尝试使用@typedef来定义一个特定类型的函数,就像这样:

/**
 * @typedef {function(paramType0, paramType1):returnType} name.space.and.TypeName
 */

我也尝试过

/**
 * @typedef {function(paramType0, paramType1):returnType} 
 */
name.space.and.TypeName;

在定义函数的规范中,参数和返回类型是我想要定义的原因。我的问题是:

为什么验证告诉我“方法不是函数类型”。我知道可以使用类型“Function”,但据我所知,这样做不允许我定义参数和返回类型。我错了吗?

无论如何,我非常感谢您的帮助。谢谢。


听起来你可能误用了typedef,你是如何使用声明的类型的?(第二种形式更正确)。 - John
1个回答

5
典型的typedef使用如下所示:
/** @typedef {function():string} */
var SomeFunctionType;

/** @param {SomeFunctionType} x This is a function */
function useFunction(x) {
  ...
}

这个问题缺少一些细节,我猜你实际上想要一个 @type 声明来给一个值指定类型,而不是创建一个类型名称。
/** @type {function():string} */
var someFunction = getFunctionFromSomewhere();

someFunction();

这里可以找到jsdoc注释的概述: https://developers.google.com/closure/compiler/docs/js-for-compiler

这不是一个答案,更像是一条评论。 - zero298
可能是也可能不是。正如我在评论中所述,这个问题是不完整的。 - John
我相信它回答了这个问题,正如作者所描述的那样,他误用了 @typedef。如果没有确切的错误或类型的示例用法,就不可能更具体地说明。 - John
我基本上同意大家的观点。我已经使用了后者,也就是正确的版本。另一个版本更多是为了尝试一下jsdoc版本的测试。 无论如何,在上面的语法中定义类型并使用它是正确的,每个人都应该跳舞 - 只是我的linter没有。似乎是Google Closure JS Linter(gjslint)在这里指导我,但@John提供的清晰示例正是我使用它的方式。编译并工作 :) - NinjaTool
@NinjaTool 如果您想在问题中添加一些澄清的文本,我很乐意为任何未解之谜提供答案。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接