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

How can I fix the following javascript code to make it work with flowtype?

鉴于以下代码片段,我收到以下错误... 我该如何解决?

This type is incompatible with the expected return type of number enum.

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...

编辑:

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

Math.random() return 是 [0, 1) 之间的 "floating point" 数字。所以它可以 return 0.5 或 0.31231。这些类型确实不兼容。即使它 return 以相同的概率得到 0 或 1,您仍然超出了 Size 类型的限制。

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

Math.random() return是一个0到1之间的随机数,它的return类型是number.

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

无法转换它,因为在 flownumber 不是 1 | 2 | 3

的子类型