【TypeScript】Mixins 混入

在 TypeScript 中,实现 Mixins(混入)可以通过组合类和使用接口的方式来实现。Mixins 允许将一个或多个类的特性"混合"到另一个类中,从而实现代码的重用和组合。

下面是一个基本的 TypeScript 示例来讲解如何实现 Mixins:

typescript 复制代码
// 对象的混入
interface Name {
  name: string
}
interface Age {
  age: number
}
interface Sex {
  sex: number
}

let a: Name = {
  name: '张三'
}
let b: Age = {
  age: 18
}
let c: Sex = {
  sex: 1
}
// 合并成为交叉类型 let obj: Name & Age & Sex
let obj = Object.assign(a, b, c)

// 类的混入
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 = 'xx'
  changeType:() => void
  getName:() => string
}

function mixins (curCls:any, itemCls:any[]) {
  itemCls.forEach(item => {
    Object.getOwnPropertyNames(item.prototype).forEach(name => {
      curCls.prototype[name] = item.prototype[name]
    })
  })
}
mixins(C, [A, B])
let cc = new C()
console.log(cc.type); // false
cc.changeType()
console.log(cc.type); // true

需要注意的是,如果两个 Mixins 中存在相同名称的方法或属性,那么 TypeScript 会根据类的继承顺序来确定具体使用哪个方法或属性。

在实际应用中,可能会遇到更复杂的场景,需要更灵活的 Mixins 实现方式。有时候,使用接口来描述 Mixins 的合成类型可能更加适合。

相关推荐
hunterandroid1 小时前
HarmonyOS WebSocket 实战:断线重连、心跳保活与连接状态机设计
前端
hunterandroid1 小时前
StateFlow 与 SharedFlow 的边界:状态与事件的正确建模
android·前端
心念科技1 小时前
1、搜索表单 xnSearch(基于:心念后台,后端 Java 21 + Spring Boot 4 + Spring Cloud,前端提供 ReactVue3+TS、Vue3+JS、Vue2+JS
前端
计算机魔术师2 小时前
Dwarkesh Patel 对 OpenAI/Hugging Face 事件的爆款解读被指危险误导
前端
自进化Agent智能体3 小时前
Hermes GitHub PR 审查 —— 自动化代码评审
前端
涛涛ing4 小时前
OpenAI Astra 泄露:零样本生成 3D 网页,前端开发者慌了吗?
前端
ssshooter5 小时前
现在网页都能提供 MCP 了?!
前端·人工智能·程序员
杉氧5 小时前
状态管理变迁史:为什么我们放弃了 Redux 选择 Zustand?
android·前端·react native
cidy_985 小时前
OpenCode 手动配置火山方舟 Agent Plan 教程
前端
鹏多多5 小时前
PC 网站接入微信登录,这 10 个坑我替你踩完了!
前端·javascript·vue.js