2016-08-16 3 views
0

フローの最後の項目を繰り返すタプルを定義することはできますか?フロー内に無制限タプルを定義する

例:

type Operator = '=' | '<' | '>'; 
type Value = string | number; 

// this works... 
type Expression = [Operator, Array<Value>]; 
const expr = ['=', [1, 2, 3]]; 

// ...but I would like to use it without nested array: 
type Expression = [Operator, ...Value]; // this is not valid 
const expr = ['=', 1, 2, 3]; 

フローインデックスに基づいてタプル内の項目をです。TypeCheckないので、このように定義することが可能である:

type Expression = [Operator, Value, Value, Value, Value, Value]; 
const expr = ['=', 1, 2, 3]; 

しかし、それはです。TypeCheckませんアイテムの場合配列は型定義よりも長いです。

答えて

0

タプルとこのようなリストの混合はサポートされていませんが、サポートされているのは「タグ付きユニオン」です。この場合はさらに優れているようです。 (それとも、値の量が同じであってもオペレータの動的になりたいですか?)これにより

type Value = string | number; 
type Expression = 
    ['=', Value, Value, Value] 
    | ['<', Value, Value] 
    | ['>', Value] 

、あなたはすべてのオペレータが受け入れる正確にどのように多くの値を指定することができます。フロータプルで

type Expression = [Operator, Value]; 

は常に結合していないですが、「尾」のタイプは、常に私定義型の労働組合である:あなたのケースでは

+0

はい、同じ演算子であっても、値の数はさまざまです。例えば。論理演算子ANDおよびOR: [AND、['<'、 'age'、100]、['='、 'country'、 'C​​anada']、['>'、 'foo'、200] ] – dkl

0

が、これは単に動作するはずです。 e。 Operator | ValueOperatorはサブタイプがValueなので、Valueと同じです。

+0

号テール[何もすることができ(https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgDy+ATgIYZwlgC8YA5DfWAD4MA8zb9AfPQNyZcBAGpkYAVwJ0AdhIC2AIzzU2AZwwkAljIDmg7PjABRAB44SeNWq1wZtMAG1iKilQA0YMZLwBdQagAxnYaYHjmJABcJhFWNnYOjoz0ngCMAEwAzGmpqZ4A3lBwcNEZmQC+nnIwMJ4AFACUtDxgACzp-kA)。 – dkl

+0

奇妙な。 Flowのバグだと思う:https://flowtype.org/docs/arrays.html#tuples – vkurchatkin

関連する問題