对象混入
使用ES6的Object.assign
可以合并多个对象
合并完的对象会被TS推断为交叉类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| interface Name { name: string } interface Age { age: number } interface Gender { gender: number }
let a:Name = {name:"yajue"} let b:Age = {age:24} let c:Gender = {gender:0}
let obj = Object.assign(a,b,c)
|
类混入
不使用extends而是使用implements,把类当成接口
使用Object.getOwnPropertyNames
可以获取对象的所有属性名(除了继承的属性),返回属性名数组
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 32
| class A { type:boolean changeType() { this.type=!this.type } }
class B { name:string getName(): string { return this.name } }
class C implements A,B { type: boolean = false name: string = "yajue" changeType:()=> void getName:()=> string }
mixins(C,[A,B]) function mixins(curClas:any,itemCls:any[]) { itemCls.forEach(item=> { Object.getOwnPropertyNames(item.prototype).forEach(name=> { curClas.prototype[name] = item.prototype[name] }) }) }
|