The built-in type number
in Flow允许“奇异”值,例如 Infinity
、-Infinity
和 NaN
。
如何强制类型只允许实数?
编辑。 这不是如何检查变量是否为实数的问题。 这是关于使用 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/