如何修复以下javascript代码以使其与flowtype一起使用?

时间:2017-01-17 11:24:59

标签: javascript ecmascript-6 babeljs flowtype

鉴于以下代码段,我收到以下错误... 我该怎么办?

  

此类型与预期不符   返回数字枚举类型。

type Size = 1 | 2 | 3;
const GetSize = (): Size => {
    const result: number = parseInt(Math.random() * 20);
    if (result > 3) {
        return 3;
    }
    return result;
};

你可以try it online ...

修改

该问题与从整数到枚举的转换有关。

3 个答案:

答案 0 :(得分:0)

Math.random()返回一个"浮点"数字在[0,1]之间。所以它可以返回0.5或0.31231。这些类型确实不兼容。即使它以相同的概率返回0或1,您仍然不在尺寸类型的约束范围内。

解决此问题的一种方法是执行return (int)result + 1之类的操作。但我不知道Flow是否足够聪明才能理解。一种正确的方法是为您预期的所有情况设置if/else,并根据这些情况明确返回1,2或3。就像你为大于3的结果做的那样。

答案 1 :(得分:0)

Math.random()返回0到1之间的随机数,它的返回类型为number

您定义的退货类型比1 | 2 | 3更严格。 Math.random()不符合您定义的退货类型,因此无法退货。那是错误。

答案 2 :(得分:0)

无法转换它,因为flow number不是1 | 2 | 3

的子类型