我最近阅读了一篇关于javascript mixins as subclass factories的文章,该文章提出了以下创建mixins的模式:
let MyMixin = (superclass) => class extends superclass {
foo() {
console.log('foo from MyMixin');
}
};
然后可以按如下方式使用:
class MyClass extends MyMixin(MyBaseClass) {
/* ... */
}
我想知道这是否适用于TypeScript,但我收到以下错误:
错误TS2507:类型“any”不是构造函数类型。
虽然它仍然会编译成正常工作的javascript,但我所做的一切都不会消除这个错误。
非常感谢任何建议。在TypeScript中参数化这样的超类是不可能的吗?
答案 0 :(得分:0)
它不适用于泛型(至少,我无法使它工作):
type SuperclassConstructor<T> = { new (): T };
let MyMixin = <T>(superclass: SuperclassConstructor<T>) => {
return class extends superclass {
foo() {
console.log('foo from MyMixin');
}
};
}
话说:
基础构造函数返回类型“T”不是类或接口类型
因为它需要一个具体的类,你可以为你想要用于这个mixin的所有类都有一个基类:
class Base { }
type SuperclassConstructor = { new (): Base };
let MyMixin = (superclass: SuperclassConstructor) => {
return class extends superclass {
foo() {
console.log('foo from MyMixin');
}
};
}
class MyBaseClass extends Base {}
class MyClass extends MyMixin(MyBaseClass) {
/* ... */
}