如何为不包括无穷大和 NaN 的数字声明 Flow 类型?

Dmi*_*sev 6 javascript types typechecking flowtype

numberFlow 中的内置类型允许使用 "exotic" 值,例如Infinity,-InfinityNaN

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

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

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

// @flow
function sum (x: real, y: real) { ... }
Run Code Online (Sandbox Code Playgroud)

我的问题是如何定义类型real以使其适用于 Flow ( http://flowtype.org/ )。

Nik*_*ita 4

使用 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
Run Code Online (Sandbox Code Playgroud)

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