我需要从同一名称空间扩展这两个类。
代表:
declare namespace myNameSpace{
class class1{
///some methods will be here
}
class class3 extends class1{
//some method wil be here
}
class class2 extends myNameSpace. class3 {
//some methods will be here
}
export namespace class2 {
//declaration will be here
}
}
我需要扩展' myNameSpace.class1'上课以及' class2'命名空间。
class newClass extends myNameSpace.class1, myNameSpace.class2 {
constructor() {
super();
}
}
如果我同时调用这两个类,我收到一条错误消息
类只能扩展单个类
还有其他方法可以在打字稿中修复此问题。
答案 0 :(得分:4)
还有其他方法可以在打字稿中修复此问题。
TypeScript是设计上的单一继承。
答案 1 :(得分:1)
您可以使用mixins但不能覆盖方法(除非您编写自定义applyMixins
方法)
使用方法:
function applyMixins(derivedCtor: any, baseCtors: any[]) {
baseCtors.forEach(baseCtor => {
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
derivedCtor.prototype[name] = baseCtor.prototype[name];
});
});
}
你必须实施(空路)
class NewClass implements myNameSpace.class1, myNameSpace.class2 {
// empty implementation
public methodFrom1 : ()=>void;
public methodFrom2 : ()=>number;
constructor() {
// no super()
}
}
现在使用混合实际上使它成为多扩展类:
applyMixins(NewClass, [myNameSpace.class1, myNameSpace.class2]);
现在你可以创建类
了const foo = new NewClass()
foo.methodFrom1() // actually calls nameSpace.class1.prototype.methodFrom1