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

标签 javascript ecmascript-6 babeljs 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() 返回 [0, 1) 之间的“ float ”。所以它可以返回0.5或0.31231。类型确实不兼容。即使它以相同的概率返回 0 或 1,您仍然超出了 Size 类型的限制。

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

关于javascript - 如何修复以下 JavaScript 代码以使其与 Flowtype 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41695887/

相关文章:

javascript - 链接 connect/mapStateToProps/mapDispatchToProps 函数以在 react-redux 中重用代码

javascript - 如何使用 babel 编译用 es6 编写的 React 文件?

build - 使用 @babel/preset-env 和 useBuiltIns :'usage' 时是否需要导入 core-js/stable 和 regenerator-runtime/runtime ?

javascript - 从 1.2.27 更新到 1.4.7 时 Angularjs 出现错误

javascript - 如何防止 native react 中的 onPress 事件

javascript - React Native Tabbar iOS binding issue [Expected a component class, got object 对象]

javascript - 无法使用 ES6 导入语法

javascript - 将字符串分隔符更改为反引号 : possible impact?

javascript - Babel - EC6 到 EC5 的转译

javascript - 复制到 Dreamweaver 时 Jsfiddle 将不起作用