混入类似于合并
1.对象混入
可以使用es6的Object.assign 合并多个对象
interface A {
name: string
}
interface B {
age: number
}
interface C {
sex: string
}
const a = {
name: 'Yang',
}
const b = {
age: 24,
}
const c = {
sex: '男',
}
// 此时p的类型就是一个交叉类型 既有name 也有age 又有sex
const p = Object.assign(a, b, c)
console.log(p)
2.类的混入
class A {
name: string
constructor(name: string) {
this.name = name
}
changeName(name: string): void {
this.name = name
}
}
class B {
age: number
constructor(age: number) {
this.age = age
}
addAge(): void {
this.age++
}
}
// 实现类 以接口的形式去混入 implements 用于接口的继承 这里把类当成接口进行混入
// 需要实现上面的方法和属性
class C implements A, B {
name: string = 'Yang'
age: number = 23
changeName(): void {}
addAge(): void {}
}
mixins(C, [A, B])
function mixins(currentClass: any, itemClass: any[]) {
currentClass.forEach((item) => {
Object.getOwnPropertyNames(item.prototype).forEach((name) => {
currentClass.prototype[name] = item.prototype[name]
})
})
}