如何在 JavaScript 中记录返回

2024-02-12

我正在为浏览器应用程序的工作项目编写自己的库,并且在决定如何注释代码时遇到同样的老问题。

我正在尝试遵循JsDoc https://code.google.com/p/jsdoc-toolkit/w/list语法,但可能会继续谷歌闭包编译器 https://developers.google.com/closure/compiler/docs/js-for-compiler方式。我最终可能会在文档中使用两个 @return 和 @returns 标签,只是为了可移植性(当我设置文档的自动生成时)。

现在,问题是,如何记录函数中自定义匿名对象的返回?例如:

return {
    username: 'username',
    password: 'password',
    enabled:  true
};

JsDoc 有一个示例,说明如何记录 @param 来期望具有某些字段的对象,但不包含 @returns 标记。同样,记录类型的 Google Closure Compiler 文档也很模糊,并且没有示例来解决它。


闭包编译器使用的一个子集JSDoc 注释 http://code.google.com/p/jsdoc-toolkit/(并添加了一些自己的)。请参阅编译器的注释参考 https://developers.google.com/closure/compiler/docs/js-for-compiler对于全套。 JSDoc 注释类似于 JavaDoc 注释,是一个注释块,开头为/**(两颗星)。虽然注释的每一行通常都以其自己的开头*,这是一个不需要的约定。每行只允许有一个 JSDoc 标记,但标记的参数可以跨越多行。

该注释通常适用于以下语句。这里有些例子:

Variable

/** @type {string} */ var a;

类型转换

var b = /** @type {string} */ (window['foo']);

注意额外的括号

命名函数

/**
 * @param {string} bar
 * @return {boolean}
 */
function foo(bar) { return true; }

函数表达式

/** @type {function(string):boolean} */
var foo = function(bar) { return true; }

var foo2 =
  /**
   * @param {string} bar
   * @return {boolean}
   */
  function(bar) { return true; }

Typedef

为了方便和可维护性,可以使用 typedef 为复杂类型(包括联合和记录类型)添加别名。这些注释可能很长,但可以分为多行以提高可读性。

/** @typedef {{
 *             foo:string,
 *             bar:number,
 *             foobar:number|string
 *           }}
 */
var mytype;

对于您的原始示例,有多种可能的方法来注释此类函数返回值。最具体且仍然方便的记录类型之一是:

/** @return {{username:string, password:string, enabled:boolean}} */
function() {
  return {
    username: 'username',
    password: 'password',
    enabled:  true
  }
}

注意额外的{}。另请记住,记录类型不会阻止属性重命名。

该注释告诉编译器该函数返回一个匿名类型username, password and enabled特性。其他有效的选项是在其他地方定义一个接口并将返回值类型转换为该接口。最不具体的注释是Object or *.

要查看各种可能的注释,请查看编译器项目中的 extern 文件 http://code.google.com/p/closure-compiler/source/browse/#svn/trunk/contrib/externs.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JavaScript 中记录返回 的相关文章

随机推荐

  • SQL ANY 和 SOME 关键字在所有 SQL 方言中都是同义词吗?

    在 Postgres 中 ANY and SOME当用在谓词表达式的右侧时是同义词 例如 这些是相同的 column ANY SELECT column SOME SELECT 此处记录了这一点 http www postgresql or
  • 在 UIWebView 中执行操作后隐藏文本选择手柄

    我有几个定制UIMenuItems通过选择来执行操作UIWebView 在该选择上运行操作后 我想隐藏选择手柄 就像copy does 我尝试过使用window getSelection removeAllRanges 那是有效的windo
  • Networkx - 从社区创建图表

    使用以下工作代码 import netowkx as nx import networkx algorithms community as nx comm G nx karate club graph Find the communitie
  • 当我的子类位于不同的包中时,为什么我的子类无法访问其超类的受保护变量?

    我有一个抽象类 relation包装内database relation和它的一个子类 Join 在包中database operations relation有一个名为的受保护成员mStructure In Join public Joi
  • 在 JBoss 中我可以配置“共享库”位置吗?

    我在开发环境中使用 JBoss 4 2 2 GA 应用程序服务器 我有一个 WAR 文件 MyWar war和一个 JAR 文件ExternalJar jar 这些文件的结构如下 应用程序 WAR 文件 MyWar war AppClass
  • 复制功能如何工作? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我不明白如何copy函数基于文档工作 copy 内置函数将元素从源切片复制到 目标切片 作为一种特殊情况 它还会从 字符串到字节切片 源和目
  • 如何在上传到服务器之前调整/压缩 Android 中的相机图像或图库图像?

    我必须上传可以从图库中选择或用相机拍摄的图像 我已经成功地做到了这一点 但问题是 有时图像大小为 1MB 所以上传到服务器需要更多时间 我需要在上传之前调整此图像的大小 这个怎么做 public void onActivityResult
  • 从 JSON 创建数组的数组

    我在 ajax 调用后收到以下内容response在 PHP 中使用json encode 2013 02 24 0 2013 02 25 0 2013 02 26 1 2013 02 27 6 2013 02 28 6 2013 03 0
  • 无法在cygwin上安装uwsgi

    我的主要操作系统是 Windows 10 但我使用 cygwin 作为终端 通过安装uwsgi时pip3 install uwsgi命令 它失败并显示错误消息 AttributeError module os has no attribut
  • 我如何全局安装 sbt 插件

    我从github下载了android sdk plugin 文档说我需要全局安装插件 将插件全局安装到 sbt plugins 或 sbt 0 13 plugins 分别适用于 0 12 和 0 13 addSbtPlugin com ha
  • 实体(空)不符合键“title”的键值编码

    我正在尝试让 RestKit 和 CoreData 一起工作 我越来越接近了 但我收到以下错误 CoreData error Failed to call designated initializer on NSManagedObject
  • 单个应用程序中的多个 RCTRootView

    我正在创建一个 React Native 应用程序 但我需要使用 Objective C 来构建我的自定义 UIView 但问题是这个 UIView 需要显示反应内容 例如反应文本输入和按钮 我正在考虑向自定义 UIView 添加 RCTR
  • 位图.保存“一般错误”

    当我运行我的应用程序时 出现以下错误 GDI 中发生一般错误 我环顾四周 发现人们也有类似的错误 但没有找到真正的解决方案 或者实施起来确实很痛苦 那些没有得到解决方案的人还没有发布他们的代码 所以我想我不妨尝试一下并提出另一个关于如何修复
  • @login_required 正在丢失当前指定的语言

    我在用i18n patterns使我的应用程序国际化并且它正在工作 除非我单击需要登录的链接 受保护的视图 login required装饰器 我被重定向到默认语言的登录表单 而不是当前活动的语言 如何保留活动 URL 换句话说 当在法语部
  • rawQuery(查询,选择参数)

    我想使用选择查询从表中检索数据 我已经发现 rawQuery query selectionArgs 的方法SQLiteDatabase类来检索数据 但我不知道如何query and selectionArgs应该传递给rawQuery m
  • 你能从 sklearn 网格搜索 (GridSearchCV) 中获得所有估计器吗?

    我最近使用测试了许多超参数组合sklearn model selection GridSearchCV 我想知道是否有一种方法可以调用在此过程中接受过培训的所有先前估算器 search GridSearchCV estimator my e
  • 分布式缓存

    我正在 opensuse linux 上使用 hadoop 19 我没有使用任何集群 而是在我的机器本身上运行我的 hadoop 代码 我遵循放入分布式缓存的标准技术 但我不是一次又一次地从分布式缓存访问文件 而是将文件的内容存储在一个数组
  • 如何知道 C 函数 free 是否正常工作?

    我发现以下代码的结果存在一些差异 include
  • 为什么Java中没有AtomicBoolean数组数据类型?

    我注意到有NOJava 中的 AtomicBooleanArray 数据类型类似于 AtomicIntegerArray 虽然我可以使用 AtomicBoolean 来满足当前的需求 但我很想了解为什么 AtomicBooleanArray
  • 如何在 JavaScript 中记录返回

    我正在为浏览器应用程序的工作项目编写自己的库 并且在决定如何注释代码时遇到同样的老问题 我正在尝试遵循JsDoc https code google com p jsdoc toolkit w list语法 但可能会继续谷歌闭包编译器 ht