将函数从 Scala.js 传递到 Javascript 函数?

Pass function from Scala.js to Javascript function?

我在 Scala.js 中这样定义函数:

val myFunction: js.Function1[js.Array[String], Boolean] = (data: js.Array[String]) => true

并且还在页面上定义了Javascript函数:

function callFunction(inputFunction){
  console.log(inputFunction(["10"]))
}

当我从 Scala.js 拨打电话时:

GlobalScope.callFunction(myFunction)

我收到错误:

Uncaught TypeError: inputFunction is not a function

我做错了什么以及如何解决?

GlobalScope的定义:

@JSGlobalScope
@js.native
object GlobalScope extends js.Any {
  def GlobalScope.callFunction(someFunction: (js.Array[String]) => Boolean): Unit = js.native
}

GlobalScopecallFunction的定义有误。它要求 js.Array[String] => Boolean,这是一个从 js.Array[String]BooleanScala 函数,而不是 JavaScript 函数。当你调用它时,即使你给它一个 js.Function1[js.Array[String], Boolean](这是正确的),Scala 类型系统也会插入一个从 js.Function1scala.Function1 的隐式转换以符合预期的类型。但是当然 callFunction 中的 JavaScript 代码接收到一个 Scala 函数并且对它不满意。

解决办法是修正callFunction的定义,取一个js.Function1:

@JSGlobalScope
@js.native
object GlobalScope extends js.Any {
  def callFunction(someFunction: js.Function1[js.Array[String], Boolean]): Unit = js.native
}