2016-08-16 52 views
0

是否可以使用Flow中的最后一项重复定义元组?在Flow中定义无界元组

例子:

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]; 

流量不进行类型检查的基础上,指数的元组中的项目,因此可以将其定义是这样的:

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

但它不会进行类型检查的项目,如果该数组比类型定义长。

回答

0

它不支持混合元组和列表,但它支持的是'标记联合',在这种情况下它似乎更好! (或者你想要的值量,即使是同一个运营商是动态的?)

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

有了这个,你可以指定每个运营商到底有多少价值接受。

+0

是的,即使对于同一个操作员,值的数量也可能有所不同。例如。逻辑运算符AND和OR: ['AND',['<','age',100],['=','country','Canada'],['>','foo',200] ] – dkl

0

在你的情况,这应该只是工作:

type Expression = [Operator, Value]; 

在流元组始终是绑定的,但“尾巴”的类型始终定义类型的工会,我。即Operator | Value。由于OperatorValue的子类型,因此与Value相同。

+0

号尾[可以是任何东西(https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgDy+ATgIYZwlgC8YA5DfWAD4MA8zb9AfPQNyZcBAGpkYAVwJ0AdhIC2AIzzU2AZwwkAljIDmg7PjABRAB44SeNWq1wZtMAG1iKilQA0YMZLwBdQagAxnYaYHjmJABcJhFWNnYOjoz0ngCMAEwAzGmpqZ4A3lBwcNEZmQC+nnIwMJ4AFACUtDxgACzp-kA)。 – dkl

+0

奇怪。我想这是Flow中的一个错误:https://flowtype.org/docs/array.html#tuples – vkurchatkin