我想编写一个接口来定义一个方法,该方法将参数或返回类型作为实现此接口的类的实例。
也就是说,我希望编译器知道它可以调用接口方法和该类的任何其他方法。我的直觉是尝试这个:
interface Doable {
doSomething(otherThing: Doable): Doable
interfaceMethod(): boolean
}
class Foo implements Doable {
doSomething(otherFoo: Foo): Foo {
if (this.interfaceMethod() && this.nonInterfaceMethod()) {
return otherFoo;
} else {
return this;
}
}
interfaceMethod(): boolean {
return true;
}
nonInterfaceMethod(): boolean {
return true;
}
}
但是,Flow并不认为Foo
的{{1}}方法有效,因为它说doSomething
与Foo
不兼容。
是否可以这种方式使用接口?除了在接口方法param类型上使用Doable
之外还有其他方法吗?
答案 0 :(得分:0)
您可以为Doable
接口提供一个类型参数,以表示其确切的子类型:
interface Doable<A> {
doSomething(otherThing: A): A,
interfaceMethod(): boolean,
}
class Foo implements Doable<Foo> {...}
此类型参数以及我们实现Doable<Foo>
的方式,使类型检查器可以在doSomething
方法中跟踪确切的实现类型。