var a = 1; function combinor(...rest: T[]): T { return rest.reduce((previous: T, current: T) => { return previous + current; }, rest[0] || null); const strs = combinor('one', 'two'); const nums = combinor(1, 2); } function asdf() { export interface Drawable { id: number; name?: string; draw: (target: Node) => void; } class Rect implements Drawable { id: number; draw(target: Node) {} } const thing: Drawable = { id: 0, draw: function (target: Node) { } }; } function qwer() { interface DrawMethod { (target: Node): void; (target: number, options?: Object): void; } let method: DrawMethod = function(target: any) { }; let anotherMethod: DrawMethod = function(target: any, options?: Object) { }; }