【问题标题】:Using @typedef to define a specific function type使用@typedef 定义特定的函数类型
【发布时间】:2015-06-11 00:29:02
【问题描述】:

我不知道其中有多少(如果有的话)与 Google Closure 相关,或者它是否都是干净的 jsdoc,但我尝试使用 @typedef 来定义这样的特定类型的函数;

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

也试过了

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

param 和返回类型是我想要定义这个函数规范的原因。我的问题是这样的;

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

无论如何,我都非常感谢您在这方面的一些帮助。谢谢。

【问题讨论】:

  • 听起来你错过了使用 typedef,你是如何使用声明的类型的? (第二种形式更正确)。

标签: javascript function typedef google-closure jsdoc


【解决方案1】:

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

【讨论】:

  • 这不是答案。更多的是评论。
  • 它可能是也可能不是。正如我在评论中所说,这个问题是不完整的。
  • 我相信它确实回答了这个问题,正如作者所描述的那样,他滥用了@typedef。如果没有确切的错误或类型的示例使用,就不可能更具体。
  • 我基本上同意 - 好吧 - 每个人。我已经最终使用了正确的后一个版本。另一个更多是测试 jsdoc 版本。在任何情况下;在上面的语法中定义一个类型并使用它是正确的,每个人都应该跳舞——只是我的 linter 不是。似乎是试图在这里指导我的 Google Closure JS Linter (gjslint),但@John 提供的清晰示例正是我使用它的方式。编译和工作:)
  • @NinjaTool 如果您想在问题中添加一些澄清文字,我很乐意为剩余的误解提供答案。
猜你喜欢
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多