JSDoc 中对象中任意键的值的文档结构

lag*_*lex 2 javascript documentation jsdoc

我有一个功能factory

function factory(events) {
  for(const key in events) {
    const { before, after } = events[key]
  }
}
Run Code Online (Sandbox Code Playgroud)

参数events通常是:

{
  only: {
    before(){}
    after(){}
  },
  except: {
    before(){}
    after(){}
  },
}
Run Code Online (Sandbox Code Playgroud)

其中键only,except可以是任何内容,但值始终(必须是)类型,{before, after}其中before,after都是函数。

如何使用 JSDoc 记录函数events中参数的结构factory

我能想到的唯一解决方案是创建events一个数组,然后我可以typedef像这样使用:

/**
 * @typedef event
 * @property {function} before
 * @property {function} after
 */
/**
 * @typedef eventTuple
 * @property {string} key
 * @property {event} event
 */
/**
 * @param {[eventTuple]} events
 */
function factory(events) {
  for(const { key, event } of events) {
    const { before, after } = event
  }
}
Run Code Online (Sandbox Code Playgroud)

但我真的想保留原来的结构。

是否可以event在我的原始结构中记录此类型定义?

我主要关心它在 VSCode 中的工作,它从 JSDoc 中提升了这些类型定义。

Dmi*_*hko 5

在此输入图像描述

您可以使用 TS 语法。

ps 老实说,我不确定这是否适用于所有地方。但它至少适用于智能感知

/**
 * @typedef event
 * @property {function} before
 * @property {function} after
 */

/**
 * @param {{[key: string]: event}} events
 */
function factory(events) {
    for (const key in events) {
        const { before, after } = events[key]
    }
}
Run Code Online (Sandbox Code Playgroud)