2015-03-30 55 views
1

我有一個使用函數重載,像代碼:打字稿:使用通用和聯合類型

function f0(v: Object): void { } 

function f1(a: number, b: number): void; 
function f1(a: string, b: string): void; 
function f1(a: any, b: any): void { 
    f0(a); // OK 
} 

,我想使用union類型轉換,但我得到一個錯誤:

function f1<T extends number | string>(a: T, b: T): void { 
    f0(a); // Error: Argument of type 'T' is not assignable to parameter of type 'Object'. 
} 

什麼是錯在這裏,明知下面是OK:

function f2(v: number | string) { 
    f0(v); 
} 
function f3<T extends number>(v: T) { 
    f0(v); 
} 
function f4<T extends string>(v: T) { 
    f0(v); 
} 

回答