给出一个课程:
class BaseClass { method(value: City): City { ... } }
一个子类:
class SubClass extends BaseClass { method(value: SanFrancisco): City { ... } // ERROR!! }
这是Flow中的一个错误,因为如果你期待一个SanFrancisco而你得到一个城市,你可能会使用只存在于SanFrancisco上的东西,这会在运行时引起错误。
如果我正在调用SubClass#method
,我是否会被类型检查程序强制提供SanFrancisco
?为什么流程会导致错误?
答案 0 :(得分:1)
假设Seattle
和SanFrancisco
都直接延伸City
,即
class City { location: [number, number]; }
class Seattle extends City { raining: bool; }
class SanFrancisco extends City { foggy: bool; }
BaseClass.prototype.method
接受City
,Seattle
和SanFrancisco
的实例,并可能使用location
,SubClass.prototype.method
可以免费使用foggy
即使Seattle
缺少财产。这意味着SubClass.prototype.method
通常无法替代BaseClass.prototype.method
。