function extend‹T, U›(first: T, second: U): T & U {
    let result = ‹T & U›{};
    for (let id in first) {
        (‹any›result)[id] = (‹any›first)[id];
    }
    for (let id in second) {
        if (!result.hasOwnProperty(id)) {
            (‹any›result)[id] = (‹any›second)[id];
        }
    }
    return result;
}

class Person {
    constructor(public name: string) { }
}
interface Loggable {
    log(): void;
}
class ConsoleLogger implements Loggable {
    log() {
        // ...
    }
}
var jim = extend(new Person("Jim"), new ConsoleLogger());
var n = jim.name;
jim.log();