学习ts(九)混入

对象混入

使用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())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值