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

Document structure of a value for arbitrary keys in an Object in JSDoc

我有一个函数factory:

function factory(events) {
  for(const key in events) {
    const { before, after } = events[key]
  }
}

参数 events 通常是:

{
  only: {
    before(){}
    after(){}
  },
  except: {
    before(){}
    after(){}
  },
}

onlyexcept 可以是任何值,但值始终(必须)是 {before, after} 类型,其中 beforeafter 是函数。

如何使用 JSDoc 在 factory 函数中为 events 参数记录此结构?

我能想到的唯一解决办法是把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
  }
}

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

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

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

您可以使用 TS 语法。

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

/**
 * @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]
    }
}