Kozack
@Kozack
Thinking about a11y

Как использовать JSDoc?

На nodejs есть модуль с классом:
/**
 * Модуль парсера сообщений
 * @module
 */
class MessageParserClass {
  /**
   * @param ...
   * @return ...
   */
  getA() {}

  /**
   * @param ...
   * @return ...
   */
  getB() {}

  getAll() {
    return {
      a: this.getA(),
      b: this.getB(),
    }
  }
}


В описании метода getAll я хочу указать возвращаемое значение: объект с полями двух методов. Но не могу понять как.
Я пробовал что-то такое
/**
   * @typedef  {Object}     Result
   * @property {module:libs/MessageParser~MessageParserClass.getA}  a
   * @property {module:libs/MessageParser~MessageParserClass.getB}  b  
   */
  /**
   * @return {Result}    Данные для поиска
   */
  getAll() {
    return {
      a: this.getA(),
      b: this.getB(),
    }
  }

Но после компиляции, в документах строки module:libs/MessageParser~MessageParserClass.getA и module:libs/MessageParser~MessageParserClass.getB не кликабельные и не ведут на соответствующие разделы - описание методов.
Однако уели удалить метод и оставить ссылку на класс, то всё работает как ожидалось.
/**
   * @typedef  {Object}     Result
   * @property {module:libs/MessageParser~MessageParserClass}  a
   * @property {module:libs/MessageParser~MessageParserClass}  b  
   */
  /**
   * @return {Result}    Данные для поиска
   */
  getAll() {
    return {
      a: this.getA(),
      b: this.getB(),
    }
  }

Так как указать метод класса в качестве типа данных? Как сослатся на метод класса вместо самого класса?
  • Вопрос задан
  • 1121 просмотр
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
ClassName.method в jsdoc указывает на метод, объявленный как static, который вызывают как ClassName.method(). Для методов экземпляра это пишется ClassName#method.

P.S.
return {
      a: this.getA(),
      b: this.getB(),
    }

это не объект с двумя методами, если только getA и getB не возвращают функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы