【问题标题】:Documenting classes that are generated through functions (mixing)记录通过函数生成的类(混合)
【发布时间】:2020-02-19 14:45:42
【问题描述】:

我正在尝试记录以下代码,但我似乎无法让 JSDoc 记录该类,甚至无法引用它的存在。

// 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);

如何记录此代码,以便 JSDoc 看到 SomeMixin 可以被继承(是一个类),并且当我创建 MyClass 的实例时,它会继承方法 func

【问题讨论】:

    标签: javascript jsdoc


    【解决方案1】:

    更新

    https://stackoverflow.com/a/52335792/5458200 的帮助下,我得到了:

    // 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);
    


    这是我尝试过的一个版本。不是最好的解决方案,但在 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();
    

    但是,仍然需要弄清楚如何使用泛型类型。 this question 可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-22
      • 2016-12-22
      • 2012-09-03
      • 2016-07-13
      • 2017-11-09
      • 1970-01-01
      • 2013-05-22
      相关资源
      最近更新 更多