Mixins混入
// 1. 对象混入 合并 A对象 B对象 合并到一起
// 2. 类的混入 A类 B类 合并到一起
interface A {
age: number
}
interface B {
name: string
}
let aa: A = {
age: 15
}
let bb: B = {
name: 'John'
}
//1.扩展运算符 浅拷贝 返回一个新的类型
let cc = {...aa, ...bb,}
// 2.Object.assign() 浅拷贝 交叉类型
// let cc1 = Object.assign({ },a,b)
// 3.深拷贝 structuredClone 需要node18版本以上以及谷歌浏览器90多以上
// structuredClone(aa)
// 2.类的混入
// 插件类型混入
class Logger {
log(msg: string) {
console.log(msg)
}
}
class Html {
render() {
console.log('render')
}
}
class App {
run() {
console.log('run')
}
}
// 类的混入
type Custructor<T> = new (...args: any[]) => T
function pluginMinxins<T extends Custructor<App>>(Base: T) {
return class extends Base {
private Logger = new Logger()
private Html = new Html()
constructor(...args: any[]) {
super(...args)
this.Logger = new Logger()
this.Html = new Html()
}
run() {
this.Logger.log('run')
this.Html.render()
}
}
}
const mixins = pluginMinxins(App)
const app = new mixins()
app.run()