为什么在 Scala.js 中将 Double 用于不 "require" Double 的属性?

Why is Double used in Scala.js for properties which do not "require" Double?

我正在查看 Screen class(包 org.scalajs.dom.raw)并注意到以下属性:

def width: Double = js.native

def availHeight: Double = js.native

def height: Double = js.native

是否有任何理由使用 Double 而不是 Int?我不熟悉 Scala.js 代码,但对我来说使用 Int.

更有意义

我在这里错过了什么?

有时,看起来总是整数的东西实际上可以取非整数值,正如@Bob Dalgleish 解释的那样。

也有使用 Double 的情况,因为值可以大于 2^31。虽然是整数,但它们超出了 Int 的范围,必须键入 DoubleLong 是不透明的,因此不是 JS 数字的有效表示)。

然而,很多时候 Scala.js 门面类型(尤其是 DOM)使用 Double 仅仅是因为它们是从 TypeScript 类型定义转换而来的,这只有 numbers。 Double 是保守的近似值。在这些情况下,在验证原始规范(通常在 Web IDL 中)后,我们可以将其缩小到 Int(欢迎 PR,并附有对 Web IDL 规范的 link)。

您提到的 Screen 属性的具体情况属于最后一类。从the original IDL, those values are described as "long"s. In IDLs, a long is an integer in the range [-2^31, 2^31-1]中可以看出,正好是Scala.js.

中的一个Int的范围