流继承 - B类扩展A与A不兼容

时间:2017-07-25 11:11:08

标签: javascript flowtype

我希望这可以工作,而不是在流程中输出错误:

/* @flow */

class TreeNode {
  root: TreeNode
}

class RootNode extends TreeNode {}

class OtherNode extends TreeNode {
   root: RootNode 
}

但我获得了:TreeNode. This type is incompatible with RootNode。 Tho RootNode延伸TreeNode

我做错了什么?

您可以在https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVBjGBDAzrsAFQCcBTUgOTgBNSwBvVMMYuOAFwC4izKbTUAX3RY8BAEpt2VWmFIAPdqQB21AiXIy69YZhz4wAeXYALUsS1zFKtT038GTZqw7dJHS0KA

看到问题

1 个答案:

答案 0 :(得分:4)

默认情况下,字段和属性是不变的,因为您可以读取和写入它们。您需要将字段标记为协变以允许子类

/* @flow */

class TreeNode {
  +root: TreeNode
}

class RootNode extends TreeNode {}

class OtherNode extends TreeNode {
   root: RootNode 
}

DemoFurther reading以便更好地理解。