Google JavaScript闭包:定义传递给许多函数的结构

Ale*_*lke 3 javascript types google-closure-compiler

当我使用Google闭包编译器加强我的JavaScript代码时,我遇到了一个问题,我没有看到我喜欢的答案.

我有一个简单的类,有4个函数:

open:  function(settings) { ... },
close: function(settings) { ... },
hide:  function(settings) { ... },
show:  function(settings) { ... }
Run Code Online (Sandbox Code Playgroud)

如您所见,所有函数都包含一个名为settings的对象.我可以使用强类型定义轻松声明设置,例如:

/**
 * @param {{p1: string, p2: number, p3: function(string)}} settings The settings.
 */
open: function(settings) { ... };
Run Code Online (Sandbox Code Playgroud)

这是有效的,只需要为打开,关闭,隐藏和显示功能中的每一个复制/粘贴@param定义.所以如果我添加一个参数,我要确保我更新所有4个函数!

有没有办法声明一个类型,然后多次重用它,而不必声明一个真正的JavaScript对象?这样的事可能吗?

/**
 * @deftype {{...}} some_name
 */
Run Code Online (Sandbox Code Playgroud)

或者你会把它作为一个外部定义,所以至少执行环境没有看到这个定义?

PS有问题的对象永远不会保存设置.它使用该结构来保存它生成的数据(例如标识符)并知道用户想要执行的不同功能.每个用户都可以有不同的设置集和对象本身仍可以像单(我所需要的对象只有一个实例来管理任意数量的窗口).

Fel*_*ing 5

是的,你可以使用@typedef:

/**
 * @typedef {{p1: string, ...}}
 */
var Settings;
Run Code Online (Sandbox Code Playgroud)

然后:

/**
 * @param {Settings} settings The settings.
 */
open: function(settings) { ... };
Run Code Online (Sandbox Code Playgroud)