如何说服Flow类型A是抽象类型B的子类型而不改变A的定义?

时间:2015-08-03 09:37:53

标签: javascript flowtype

考虑一个班级A

class A { }

是否可以声明抽象类型B,并声明AB的子类型,没有更改{{1}的定义}}?即以下应编译:

A

理由:我使用支持类似于Clojure和Elixir协议的系统的语言生成带有Flow注释的JavaScript代码。

1 个答案:

答案 0 :(得分:0)

你能使用接口吗?接口使用结构子类型。所以,如果你有

interface B {
  someProperty: string;
}

然后,string属性someProperty的任何内容都是B的子类型。

class A {
  someProperty: string;
}

// No error
function testClassSubTyping(a: A): B {
  return a;
}

class C {}

// Error: property `someProperty` not found in C
function testBadClassSubTyping(c: C): B {
  return c;
}