gpt4 book ai didi

javascript - 记录通过函数生成的类(混合)

转载 作者:行者123 更新时间:2023-12-01 15:08:57 29 4
gpt4 key购买 nike

我正在尝试记录以下代码,但我似乎无法让 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 .

最佳答案

更新

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

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

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

关于javascript - 记录通过函数生成的类(混合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60302898/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com