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   ChoZ  阅读(3)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2023-02-16 Axios封装

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示