如何使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