为什么要在 Vuex 状态定义中记录类型的惯用语是什么?

What's the idiomatic why to document the types in a Vuex state definition?

我们在一个组件中有一个相当大的状态,代码就像

export default {
  someObject: {},
  someOtherObject: {},
  evenMore: []
  <etc...>
}

没有任何类型,很难弄清楚发生了什么。我们目前无法使用 Typescript。有没有一种惯用的方式来使用例如JSDoc 来记录类型?像

export default {
  /** @var SomeClass */
  someObject: {},
  /** @var SomeOtherClass
  someOtherObject: {},
  /** String[] */
  evenMore: []
  <etc...>
}

会不会太吵了?什么是标准的 Vue 实践?

编辑:这是一个例子:https://www.npmjs.com/package/jsdoc-vuex-plugin#the-state

/**
 * The Vuex 'state' object.
 * @name State
 * @type {object} 
 * @property {boolean} boolProp This property is a boolean.
 * @property {string} strProp This property is a string.
 * @property {number} numProp This property is a number.
 */

这或多或少取决于您使用的 IDE。我正在使用 VSCode 并且它非常了解类型,我只需要在某些情况下进行明确的 jsdoc 注释。

所以使用导出默认值,而不是像这样导出对象:

export default {
  /** @var SomeClass */
  someObject: {},
  /** @var SomeOtherClass
  someOtherObject: {},
  /** String[] */
  evenMore: []
  <etc...>
}

你需要做的:

const export_me = {
    /** @var SomeClass */
    someObject: {},
    /** @var SomeOtherClass
    someOtherObject: {},
    /** String[] */
    evenMore: []
  }

export default export_me

对于函数,如果你不在参数中解构它们,你将需要做这样的事情

/** 
  @typedef {{
    name: string,
    age: number
  }} Person
  @param {Person} person
  @param {number} speed

  @returns {number}
*/
export function runningMan (person, speed) {
    const {
        name,
        age
    } = person;
}

我不使用 @property 因为它在 vscode 中不起作用。