Согласно https://github.com/Microsoft/TypeScript/blob/master/src/lib/es6.d.ts, это декларация Object.assign:
assign<T, U>(target: T, source: U): T & U;
assign<T, U, V>(target: T, source1: U, source2: V): T & U & V;
assign<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;
assign(target: any, ...sources: any[]): any;
Так что реализация для #extend будет выглядеть примерно так:
function extend<T, U>(target: T, source: U): T & U;
function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;
function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;
function extend(target: any, ...sources: any[]): any {
//implementation
}
Однако если ES6. d.ts существует, то возникает вопрос о том, следует ли использовать это вместо обычного #extend ..