JSDoc - Function参数应该是object的属性

时间:2015-11-23 11:26:52

标签: javascript jsdoc

我有一个对象定义了一组这样的动作:

var actions = {
    close: "action_close",
    renderPreview: "action_renderpreview",
    switchToMobile: "action_switchmobile",
    switchToTablet: "action_switchtablet",
    openConfiguration: "action_configuration",
    save: "action_save"
};

然后我有一个方法可以将这些动作绑定到这样的函数:

/**
 * Add an event handler to a toolbar action
 * @param {actions.<prop>} action - The action to bind
 * @param {string} fnCallback - The function to invoke when the action is executed
 */
function onAction(action, fnCallback) {
    this.actionHandlers[action] = fnCallback;
}

我想使用JSDoc来记录onAction函数的action参数应该是actions对象的属性值。显然{actions.<prop>}不是正确的方法,但我想知道是否有一种简单的方法来实现这一目标。

我可以将action param记录为{string},但随后任何随机字符串都可以传递给onAction函数,我试图避免使用正确的JSDoc文档。

这可能是一个非常简单的解决方案,或根本不可能/不必要。无论哪种方式,我都搞清楚了!谢谢!

1 个答案:

答案 0 :(得分:1)

你正在以错误的方式看待它。在声明操作时,声明属性的特定类型:

/**
 * @typedef {string} MyAction
 * @typedef {object} Actions
 * @property {MyAction} prop
 */

然后你可以直接使用那种类型

/**
 * ...
 * @param {MyAction} action - The action to bind
 */

然而,这仍然允许任何string。要将字符串值限制为特定集,您需要jsdoc enum

/**
 * Actions.
 * @readonly
 * @enum {string}
 */
var actions = {
   close: "action_close",
   ...
};