学习ts(九)混入

对象混入

使用Object.assign()进行对象混入,最后的people会被识别为三种类型的联合类型
学习ts(九)混入_第1张图片

类混入

使用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())

你可能感兴趣的:(typeScript,学习,javascript,前端)