Что за идиома c зачем документировать типы в определении состояния Vuex? - PullRequest
0 голосов
/ 06 мая 2020

У нас есть довольно большое состояние в одном компоненте, где код похож на

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

Без каких-либо типов трудно понять, что происходит. На данный момент мы не можем использовать Typescript. Есть ли идиоматический c способ использовать, например, JSDo c для документирования типов? Что-то вроде

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

Или это будет слишком шумно? Какая стандартная практика Vue?

Edit : Вот пример: 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.
 */

1 Ответ

0 голосов
/ 06 мая 2020

Это более или менее зависит от того, какую IDE вы используете. Я использую VSCode, и он очень хорошо понимает типы, мне нужно только делать явные комментарии jsdo c в определенных ситуациях.

Итак, с экспортом по умолчанию вместо экспорта объекта, например:

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.

...