如何使typescript在分部类中混合

如何使typescript在分部类中混合,typescript,Typescript,我希望类A从类B继承属性,但我不想使用扩展。所以我用的是混音器。像这样: class A{ someProp: String someMethod(){} } class B implements classA{ someProp: String someMethod: () => void; } 但是我不想重新定义classA中的所有属性和方法, 所以我试着用Partial这样的关键字: class B implements Partial<classA>{}

我希望
类A
类B
继承属性,但我不想使用
扩展
。所以我用的是混音器。像这样:

class A{
 someProp: String
 someMethod(){}
}

class B implements classA{
  someProp: String
  someMethod: () => void;
}
但是我不想重新定义
classA
中的所有属性和方法, 所以我试着用
Partial
这样的关键字:

class B implements Partial<classA>{}
类B实现部分{} 我收到一个typescript编译器错误:
一个类只能实现另一个类或接口


关于如何解决这个问题有什么想法吗?

使用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 {}) {}

mixin方法更好,除非你有合理的理由避免它,否则我会使用它。

当你使用
实现
时,你必须重新定义所有属性,这不像
扩展
那样自动获得所有属性,然后你就可以重写它。@NitzanTomer但是你可以使用
类a{props;}
接口B扩展了一个{}
类B{}
,它将提供您需要的所有输入。然后您可以使用类似于
assign
的方法来处理实际的复制。@AluanHaddad复制成员/方法并不容易,
Object.assign
将处理实例属性,但是原型上的方法呢?另外,如果类
B
重新定义某个成员/方法,会发生什么情况?一旦您进行复制,它将被重写。@NitzanTomer是的,没有银弹,我只是指出类型系统可以通过声明合并来处理它。我会完全避免这种模式,而选择类级或对象级的混合,这两种混合现在都有可靠的支持。
class B {}
interface B extends A {}
Object.assign(B.prototype, A.prototype); // copy methods at runtime