对象混入
使用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 = false
changeType:()=>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())