// 对象的混入
type A = {
name: string
}
type B = {
age: number
}
const a9:A = {
name: 'xiaobai'
}
const b9:B = {
age: 15
}
// 使用扩展运算符此时c9的类型推断
// {
// name: string,
// age: number
// }
// const c9 = {...a9,...b9}
// 使用assign的类型推断是 A&B
const c9 = Object.assign(a9,b9)
// structuredClone语法是深拷贝,需要node18以上才能使用
structuredClone(c9)
// 类的mixins
class Looger {
log(msg:string) {
console.log(msg);
}
}
class App {
run() {
console.log('run');
}
}
// 使用插件的形式,使class进行融合
// type是一个构造函数,所以是一个new
type custructor<T> = new (...arument:any[]) => T
function pluginMixinClass<T extends custructor<App>>(Base:T) {
return class extends Base {
private Looger = new Looger()
constructor(...arument:any[]) {
super(...arument)
this.Looger = new Looger()
}
run(): void {
console.log('run');
}
render() {
this.Looger.log('msg')
}
}
}
const mixins = pluginMixinClass(App)
const app = new mixins()
app.render()
app.run()