交叉类型
交叉类型是将多个类型合并为一个类型,合并后类型的对象 要同时 拥有其他类型的成员,例如
Person & Serializable & Loggable同时是 Person 和 Serializable 和 Loggable。 就是说这个类型的对象同时拥有了这三种类型的成员。
使用场景:混入(mixins)
function extends<T, U>(first: T, second: U): T & U {
let result = <T & U>{}
for (let p in first) {
result[p] = first[p]
}
for (let p in first) {
if (!result.hasOwnProperty(p)) {
result[p] = second[p]
}
}
}