2014-03-13 70 views
0

請查看代碼here打字稿:泛型和任何

export class Greeter<T> { 
    greeting: T; 
    constructor(message: T) { 
     this.greeting = message; 
    } 
    greet() { 
     return this.greeting; 
    } 
} 

export interface IAAA{ 
    test:(id:string)=> Greeter<string>; 
} 

class AAA implements IAAA{ 

    test(id:string):Greeter<any> { 
     //return new Greeter<string>("Hello, world"); 
     return new Greeter<number>(123); 
    } 
} 

這不會給任何錯誤。接口聲明期望輸入的對象爲string,但數字類型的any如何滿足它。我期望一個類不能實現接口的錯誤,因爲接口需要更嚴格的類型。

回答

1

要開始以下任何一種情況將是一個錯誤:

class AAA implements IAAA{  
    test(id:string):Greeter<number> { // Error 
     return new Greeter<number>(123); 
    } 
} 

// or let ts infer : 

class AAA implements IAAA{ 
    test(id:string){     // Error 
     return new Greeter<number>(123); 
    } 
} 

現在的原因如下編譯:

export interface IAAA{ 
    test:(id:string)=> Greeter<string>; 
} 

class AAA implements IAAA{  
    test(id:string):Greeter<any> {   
     return new Greeter<number>(123); 
    } 
} 

是你特別告訴TS,我返回Greeter<any>any兼容number(你的回報)和string(接口所期望的)

+0

還有點困惑。請看後續的qn http://stackoverflow.com/questions/22377759/static-typting-and-generic-contravariance – bsr