如何修复以下 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/else
s,并根据这些情况明确地设置 return 1、2 或 3。就像您对大于 3 的结果所做的那样。
Math.random()
return是一个0到1之间的随机数,它的return类型是number
.
您定义的 return 类型比那个更严格,它是 1 | 2 | 3
。 Math.random()
不符合您定义的 return 类型,因此无法 returned。那是错误。
无法转换它,因为在 flow 中 number
不是 1 | 2 | 3
的子类型
鉴于以下代码片段,我收到以下错误... 我该如何解决?
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/else
s,并根据这些情况明确地设置 return 1、2 或 3。就像您对大于 3 的结果所做的那样。
Math.random()
return是一个0到1之间的随机数,它的return类型是number
.
您定义的 return 类型比那个更严格,它是 1 | 2 | 3
。 Math.random()
不符合您定义的 return 类型,因此无法 returned。那是错误。
无法转换它,因为在 flow 中 number
不是 1 | 2 | 3