ts学习第六天-混入

42 阅读1分钟
对象的混入
分别定义三个对象,然后用Object提供的assign方法合并三个对象为一个对象
这个对象类型就会推断为三个对象的交叉类型
interface Name {
	name:string
}
interface Age {
	age:number
}
interface Sex {
	sex:number
}

let a:Name = {
	name:'xm'
}
let b:Age = {
	age:20
}
let c:Sex = {
	sex:1
}
let obj = Object.assign(a,b,c)
console.log(obj)
此时obj类型为abc的交叉类型

类的混入
class A {
	type:boolean
	changeType():void {
		this.type = !this.type
	}
}
class B {
	name:string
	getName():string {
		return this.name
	}
}

class C implements A,B {
	type:boolean = false
	name:string = 'xm'
	changeType:() => void
	getName:() => string
}

function mixins(curClass:any, itemClass:any[]){
	itemClass.forEach(item => {
		Object.getOwnPropertyNames(item.prototype).forEach(name => {
			curClass.prototype[name] = item.prototype[name]
		})
	})
}
mixins(C, [A,B])

let ccc = new C()
此时就将AB上的方法混入到了C上