2017-03-03 7 views
9
type someType = { 
    keyOne: string, 
    keyTwo: string, 
}; 

type someOtherType = { 
    keyOne: string, 
    keyTwo: string, 
    keyThree: string, 
}; 

を拡張することによって、フロータイプを作成keyOnekeyTwoを含むオブジェクトであり、これらのタイプの両方とも、唯一の違いは、後者が延びるkeyThreeの追加のキーの元です。フロー:別のタイプに

重複したコードを記述するのではなく、someTypeを拡張してsomeOtherTypeフロータイプを構築できますか?私の考えでは、ES6のオブジェクトの休息/スプレッドが気になりますが、フローでこれを達成する方法はわかりません。

ありがとうございます!

+1

の可能性のある重複[FlowType:タイプの継承(タイプA、タイプBのサブセットであります...)](http://stackoverflow.com/questions/42281539/flowtype-in​​heritance-of-types-タイプ-a-a-subset-of-type-b) –

+0

クール、リンクありがとうございます。 –

答えて

10

あなたが探しているのはintersection typeです。ドキュメントによると、

入力タイプのすべてを入力する必要があります。

構文:交差点:<タイプ1> & <タイプ2> ... & <タイプN>

交差点タイプは、既存のタイプを拡張し、それに追加のタイプの要件を追加することを意図しています。

type someType = { 
    keyOne: string, 
    keyTwo: string 
} 

type someOtherType = someType & { 
    keyThree: string 
} 

const shouldBeOk: someOtherType = { 
    keyOne: 'biz', 
    keyTwo: 'buzz', 
    keyThree: 'baz', 
} 

const shouldError: someOtherType = { 
    keyOne: 123, 
    keyTwo: 'hello', 
    keyThree: 'world', 
} 

// flow error: 
16: const shouldError: someOtherType = { 
          ^object literal. This type is incompatible with 
8: type someOtherType = someType & { 
         ^object type 

論理交差のタイプはunion typeです。ドキュメントによると、

入力タイプの1つに値が必要です。

構文:Union:<タイプ1 | <タイプ2> ... | <タイプn>

例として、共用体型を使用して列挙型を作成できます。

type fooBarBazType = 'foo' | 'bar' | 'baz'; 
const shouldBeOk: fooBarBazType = 'bar'; 

const shouldError: fooBarBazType = 'buzz'; 

4: const shouldError: fooBarBazType = 'buzz'; 
            ^string. This type is incompatible with 
4: const shouldError: fooBarBazType = 'buzz'; 
        ^string enum 
+1

上記の「可能な重複」の回答は古くなっています。交差点タイプは[2016年7月1日以降に実装されました](https://flowtype.org/blog/2016/07/01/New-Unions-Intersections.html)。 – thejohnbackes

+0

古くなっていません。そのリンクの私の答えでは、私は交差の種類を言及します。ほとんどの場合、これらは機能します。しかし、奇妙なエラーメッセージが表示されることがあり、場合によっては(正確なタイプの場合など)期待通りに動作しません。オブジェクト型のスプレッドはこの目的のためにはうまくいくでしょうし、実際には昨日着陸しました:https://github.com/facebook/flow/commit/ad443dc92879ae21705d4c61b942ba2f8ad61e4d –

+0

申し訳ありません、ナット、私は誤解しました。交差点タイプがまだリリースされていないと言っていると思った。 – thejohnbackes

関連する問題