问题描述
export function Mixin(base) {
return class extends base {
foo = "bar";
}
}
class A extends Mixin(SuperClass) {
}
let a = new A;
a. // suggests foo
这很好用,但就我而言,SuperClass
通常是同一构造函数,因此我认为实现缓存是个好主意。
let cache = new Map();
export function Mixin(base) {
if (!cache.has(base)) {
cache.set(base,class extends base {
foo = "bar";
})
}
return cache.get(base);
}
class A extends Mixin(SuperClass) {
}
let a = new A;
a. // no longer suggests foo
因此,为了恢复自动完成功能,我将操作分为两个功能。
let cache = new Map();
function Mixin(base) {
return class extends base {
foo = "bar";
}
}
/**
* @returns {ReturnType<Mixin>}
*/
export function Cached(base) {
if (!cache.has(base)) {
cache.set(base,Mixin(base));
}
return cache.get(base);
}
class A extends Cached(HTMLElement) {}
let a = new A();
a. // suggests foo
a.inn // does not suggest innerHTML
如何注释Cached
的返回值,使其知道它将扩展base
?
我正在考虑以下内容,只是无法弄清楚什么是正确的语法:
/**
* @param {T} base
* @returns {ReturnType<Mixin> extends T}
*/
export function Cached(base) {
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)