Документирование классов, которые генерируются с помощью функций (смешивание) - PullRequest
7 голосов
/ 19 февраля 2020

Я пытаюсь задокументировать следующий код, но мне кажется, что я не могу заставить JSDo c документировать этот класс или даже сослаться на его существование.

// SomeMixin.js 
export default superclass => class SomeMixin extends superclass {
   // class code goes here
   func() {}
};
import SomeMixin from './SomeMixin';
import { EventEmitter } from 'events';

/**
 * @param {SomeMixin} bar
 */
function foo(bar) {

}

class MyClass extends SomeMixin(EventEmitter) {}

const item = new MyClass();

foo(bar);

Как мне документировать этот код, чтобы JSDo c увидел, что SomeMixin может быть унаследовано (является классом), и что, когда я создаю экземпляр MyClass, он наследует метод func.

1 Ответ

4 голосов
/ 24 февраля 2020

Обновление

С помощью { ссылка } я получил:

// SomeMixin.js
/**
 * @template T
 * @typedef {new(...args: any[]) => T} Constructor
 **/

/**
 * @template {Constructor<{}>} T
 * @param {T} superclass
 */
function mixin(superclass) {
  return class SomeMixin extends superclass {
    // class code goes here
    func() {}
  };
}

export default mixin
// index.js
import createMixin from "./SomeMixin";
import { EventEmitter } from "events";

/**
 *
 * @param {MyClass} bar
 */
function foo(bar) {
  bar;
}

class MyClass extends createMixin(EventEmitter) {}

const item = new MyClass();

foo(item);

solution 2


Вот версия, которую я попробовал. Не лучшее решение, но в VSCode я вижу func и методы из EventEmitter.

// SomeMixin.js
import { EventEmitter } from "events";

/**
 * @param {EventEmitter} superclass
 */
function mixin(superclass) {
  /**
   * @extends EventEmitter
   */
  class SomeMixin extends superclass {
    // class code goes here
    func() {}
  }

  return SomeMixin;
}

export default mixin;
// index.js
import SomeMixin from "./SomeMixin";
import { EventEmitter } from "events";

class MyClass extends SomeMixin(EventEmitter) {}

const item = new MyClass();

solution 1

Но все же, Нужно разобраться, как работать с Generi c Types. Возможно этот вопрос может помочь.

...