请参阅代码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
如何满足它。我希望类没有实现接口的错误,因为接口需要更严格的类型。
答案 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>
而且any
与number
(你的回报)和string
兼容(接口期望的是什么) )