2015-12-22 32 views
4

打字稿中Object.assign的正確簽名是什麼? 我們已經實現了類似jquery的#extend函數(類似於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())