【发布时间】:2017-08-22 12:50:57
【问题描述】:
我正在尝试在 TypeScript 中使用 ES6 Mixin。我所拥有的如下,它与BaseClass完美搭配。
class BaseClass {
public foo() {}
};
interface IMyMixin {
foo2();
}
let MyMixin = (superclass: typeof BaseClass) => class extends BaseClass implements IMyMixin {
public foo2() {}
}
class MyBaseClass extends MyMixin(BaseClass) {
}
但是我不能在来自BaseClass 的派生类上应用MyMixin;同时,我也不能让 mixin 通用。
有没有办法让它同时适用于BaseClass 和DerivedClass?
class DerivedClass extends BaseClass {
public bar() {}
}
class MyDerivedClass extends MyMixin(DerivedClass) {
public something() {
// Compile Error: Property 'bar' does not exist on type 'MyDerivedClass'
this.bar();
}
}
// Compile Error: 'T' only refers to a type, but is being used as a value here.
let MyMixin = <T extends BaseClass>(superclass: typeof T) => class extends T implements IMyMixin {
public foo2() {}
}
【问题讨论】:
-
您是否打算写
class extends superclass implements IMyMixin而不是class extends BaseClass implements IMyMixin?否则superclass变量不会在MyMixin工厂函数中使用 -
@Maximus 非常感谢,我没有意识到
superclass可以用于返回类型。
标签: typescript ecmascript-6 mixins