【发布时间】:2018-09-07 05:13:53
【问题描述】:
我有一个类扩展了另一个类,如下所示
abstract class FooAbstract{
constructor(someProp:any){
this.someProp = someProp;
}
someProp:any;
}
class Foo extends FooAbstract{
constructor(prop:any){
super(prop);
}
someRandomFunction(){
console.log("Something")
}
}
我有一个界面,其功能如下图所示
interface ExampleInterface{
someFunction: (foo:FooAbstract)=>any;
}
现在我想实现接口,但想在接口实现中传递子类型作为函数someFunction的参数,如下所示
class Example implements ExampleInterface{
someFunction = (foo:Foo)=>{
console.log("Hello World");
}
}
Typescript 警告 someFunction 的实现不正确,类型 Foo 和 FooAbstract 不兼容。我想了解为什么我不能通过要求 FooAbstract
的子类型作为参数来实现函数 someFunction【问题讨论】:
-
因为不是所有的
FooAbstracts 都是Foos - 如果someFunction依赖于someRandomFunction那么它就不能接受FooAbstract的一些实现者。你不能缩小参数类型(同样你不能扩大返回类型)。