如何使用将类实现接口作为参数的方法编写Flow接口?

时间:2017-12-06 20:05:59

标签: javascript abstract-class flowtype

我想编写一个接口来定义一个方法,该方法将参数或返回类型作为实现此接口的类的实例。

也就是说,我希望编译器知道它可以调用接口方法和该类的任何其他方法。我的直觉是尝试这个:

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}}方法有效,因为它说doSomethingFoo不兼容。

是否可以这种方式使用接口?除了在接口方法param类型上使用Doable之外还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

您可以为Doable接口提供一个类型参数,以表示其确切的子类型:

interface Doable<A> {
  doSomething(otherThing: A): A,
  interfaceMethod(): boolean,
}

class Foo implements Doable<Foo> {...}

此类型参数以及我们实现Doable<Foo>的方式,使类型检查器可以在doSomething方法中跟踪确切的实现类型。