如何使打字稿混合成一个部分类

时间:2017-05-17 15:35:16

标签: typescript

我希望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

关于如何解决此问题的任何想法?

1 个答案:

答案 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方法更好,我会使用它,除非你有正当理由避免它。