2017-05-28 12 views
0

Flow's documentation statesより具体的な入力が悪い理由を誰かが説明できますか?

クラスを考える:

class BaseClass { 
    method(value: City): City { ... } 
} 

クラスとサブクラス:

class SubClass extends BaseClass { 
    method(value: SanFrancisco): City { ... } // ERROR!! 
} 

あなたはサンフランシスコ北部を期待している場合ので、これはフローでエラーであり、あなたはサンフランシスコだけに存在する何かを使う都市を手に入れますuldは実行時にエラーを引き起こします。

私がSubClass#methodを呼び出している場合は、タイプチェッカーでSanFranciscoを入力する必要はありませんか?なぜ流れがそれをエラーにしますか?

+0

一般的にOOPのエラーです。サブクラスは親とは異なるインタフェースを持ちます。 Liskov置換原理を参照してください。 – jonrsharpe

答えて

1

BaseClass.prototype.methodCitySeattle、およびSanFranciscoのインスタンスを受け入れ、おそらくlocationを使用するのに対し、すなわち

class City { location: [number, number]; } 
class Seattle extends City { raining: bool; } 
class SanFrancisco extends City { foggy: bool; } 

、あなたのSubClass.prototype.methodSeattleが欠けていてもfoggyを自由に使用する、SeattleSanFrancisco両方が直接Cityを延長したとプロパティ。つまり、は、一般にBaseClass.prototype.methodの代わりに使用できません。

https://en.wikipedia.org/wiki/Subtyping#Function_typesを参照してください。

関連する問題