mixins

// 对象的混入
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()

 

posted on 2025-02-16 17:34  ChoZ  阅读(4)  评论(0编辑  收藏  举报

导航