2015-12-22 2 views
4

Какая правильная подпись для Object.assign в машинописном тексте? Мы реализовали функцию #extend, подобную jQuery (аналогично Object.assign). К сожалению, компилятор не распознает расширенный объект.Подпись для Object.assign в машинописном тексте?

function extend<T>(dst : Object, ...src : Object[]) : T { //... } 

const data = extend({}, {foo: 'foo'}); 

data.foo //compiler error 

ответ

5

Согласно 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 ..

2

Вы также можете использовать литье:

(<any>Object).assign(this.success, success.json()) 
Смежные вопросы