打字稿:泛型和任何

时间:2014-03-13 03:30:29

标签: javascript typescript

请参阅代码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的对象,但类型为number的any如何满足它。我希望类没有实现接口的错误,因为接口需要更严格的类型。

1 个答案:

答案 0 :(得分: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>而且anynumber(你的回报)和string兼容(接口期望的是什么) )