javascript - 如何为排除无穷大和 NaN 的数字声明 Flow 类型?

标签 javascript types typechecking flowtype

The built-in type number in Flow允许“奇异”值,例如 Infinity-InfinityNaN

如何强制类型只允许实数?

编辑。 这不是如何检查变量是否为实数的问题。 这是关于使用 Flow 打字。

我正在寻找编写函数的方法,例如:

// @flow
function sum (x: real, y: real) { ... }

我的问题是如何定义类型 real 以便它与 Flow (http://flowtype.org/) 一起工作。

最佳答案

您不能使用 Flow 做到这一点。您将需要运行时检查。

请参阅此处对实数问题的讨论:https://github.com/facebook/flow/issues/1406

最重要的是,几乎任何对实数的操作都可能导致无穷大,因此区分实数和 NaN/Infinity 并不是很有用,因为它会返回一个无法保证为实数的类型。

例如,

Number.MAX_VALUE + Number.MAX_VALUE === Infinity
-Number.MAX_VALUE - Number.MAX_VALUE === -Infinity
Number.MAX_VALUE * 2 === Infinity
Number.MAX_VALUE / 0.5 === Infinity

除了该讨论之外,Flow 没有任何工具可以将某些值列入黑名单,同时允许相同类型的其他值。您只能白名单值,包括使用并集和交集。

关于javascript - 如何为排除无穷大和 NaN 的数字声明 Flow 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270382/

相关文章:

javascript - Swift 接收 JavaScript 消息不起作用

javascript - 如何在 JQuery 中对数据进行排序

javascript - 具有插值的 ng 样式不渲染背景图像?

javascript - 如何将数据从 onclick 按钮传递到变量

c++ - 识别派生类类型的正确方法(类型实体 VS dynamic_case)

c# - 如何检查表达式树中参数的类型(类似于 'is' 关键字)

javascript - 为什么 javascript 中的 parseFloat 为我返回字符串类型?

javascript - 检查一个值是否是 JavaScript 中的对象

Java 等效于 Objective-C 实例类型?

c++ - C++ 中的高效运行时类型检查