Scalajs,js.Dictionary 不一致的行为

Scalajs, js.Dictionary inconsistent behavior

我在使用 ScalaJS 时遇到不一致的错误。这是一个最小的例子:字典变量的大小和内容不一致。


def A(mapping: js.Dictionary[String]): Unit = {
  dom.console.log(mapping)
  dom.console.log(mapping.size)
}

我 link 使用 fastOptJS 的 IR。在html中的驱动程序代码中,我有

const colorSetting = new Map([
        ["1", "black"]
]);
ScalaJSExample.A(colorSetting)

在控制台中,第一行正确打印了变量的内容,

"Map {"1" => "black"}"

但是第二行打印的是0,我也试过交换两行的位置,结果是一样的。 .foreach 或 for (x <- mapping) 等任何方法都将变量映射视为空。

任何建议为什么会这样?我正在使用 Scala 2.12.8、ScalaJS 1.7.1。

谢谢!

A js.Dictionary 表示一个 POJO(普通旧 JavaScript 对象),其中元素是字段。但是您正在向它传递一个 JS new Map(),这不是 POJO——它是一个 Map。表示 JS 地图的正确类型是 js.Map.

要么传一个字典给ScalaJSExample.A,如下:

const colorSetting = {
    "1": "black"
};
ScalaJSExample.A(colorSetting)

或在 Scala.js 代码中将 mapping 声明为 js.Map

def A(mapping: js.Map[String, String]): Unit = {
  dom.console.log(mapping)
  dom.console.log(mapping.size)
}