对象混入
使用Object.assign()
进行对象混入,最后的people会被识别为三种类型的联合类型
类混入
使用implement
并非extnds
实现混入。
属性在混入类里面定义,分别在类中占位,方法分别在类中定义,在混合类中占位。这告诉编译器这些成员在运行时是可用的。
创建帮助函数,帮我们做混入操作。 它会遍历mixins上的所有属性,并复制到目标上去,把之前的占位属性替换成真正的实现代码
class A {type: boolean;changeType(): void {this.type = !this.type}
}class B {name: string getName(): string {return this.name}
}
// 使用implements实现类的混入,为将要mixin进来的属性方法创建出占位属性
class C implements A,B{type:boolean = falsechangeType:()=>void;name: string = 'str';getName:()=> string
}
Mixins(C, [A, B])
function Mixins(curCls: any, itemCls: any[]) {itemCls.forEach(item => {Object.getOwnPropertyNames(item.prototype).forEach(name => {curCls.prototype[name] = item.prototype[name]})})
}let xx = new C()
console.log(xx.type)
xx.changeType()
console.log(xx.type)
console.log(xx.getName())