我希望class A
继承class B
的属性,但我不想使用extends
。所以我使用mixin。像这样:
class A{
someProp: String
someMethod(){}
}
class B implements classA{
someProp: String
someMethod: () => void;
}
但我不想重新定义classA
中的所有属性和方法,
所以我尝试使用Partial
关键字,如此:
class B implements Partial<classA>{}
我收到打字稿编译器错误:
A class may only implement another class or interface
关于如何解决此问题的任何想法?
答案 0 :(得分:0)
将extends
与mixin模式一起使用。这涉及将A
写为mixin。
type Constructor<T = {}> = new (...args: any[]) => T;
function A<C extends Constructor>(Base: C) {
return class extends Base {
someProp: String
someMethod(){}
}
class B extends A(class {}) {}
或者,如果您对此表示厌恶,请使用声明合并将A的公共接口复制到B上。
class B {}
interface B extends A {}
Object.assign(B.prototype, A.prototype); // copy methods at runtime
mixin方法更好,我会使用它,除非你有正当理由避免它。