4
TypeScriptでES6ミックスインを使用しようとしています。私が持っているものは以下の通りで、BaseClass
で完璧に動作します。ES6 TypeScriptのジェネリック型のミックスイン
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
を適用することはできません。一方、ミックスインも一般的にすることはできません。
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 BaseClass implements IMyMixin'の代わりに' class extends superclass implements IMyMixin'を書こうとしましたか?さもなければ、 'superclass'変数が' MyMixin'ファクトリ関数で使われていません –
@ Maximusありがとう、私は 'superclass'が戻り値の型で使われることを知りませんでした。 – Haocheng