const extend = <T, U>(first:T,second:U): T & U => {
// as => 类型断言的方式断言为xx类型
let result = {} as T & U
for(let id in first) {
result[id] = first[id] as any
}
for(let id in second) {
if(!result.hasOwnProperty(id)) {
result[id] = second[id] as any
}
}
return result
}
class Person {
constructor(public name:string) {
}
}
interface Loggable {
log():void
}
class ConsoleLogger implements Loggable {
log() {
console.log('log')
}
}
let jim = extend(new Person('jim'),new ConsoleLogger())
jim.log()
console.log(jim.name)
打印结果:
log
jim