从 Scala.js 优雅地调用 js.ThisFunction

Calling a js.ThisFunction elegantly from Scala.js

TypeScriptmapbox-gl-js 的定义指定 loaded 方法 Map class return一个boolean

loaded():boolean     //def loaded:Boolean = js.native in Scala.js

但是,该方法实际上 return 是以下 JavaScript 函数,后者又 return 是 boolean预期。

function(){
  return !this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()
}

这让我将其 return 类型更改为 js.ThisFunction,

def loaded: js.ThisFunction = js.native

,用名为 map Map class 的当前实例调用它, 然后将得到的 js.Dynamic 转换为 Boolean,

map.loaded.call(map).asInstanceOf[Boolean] //Passing in map as the execution context (this)

它有效,尽管很麻烦。有什么办法优雅地做到这一点?谢谢!

无论实现如何,我都建议将方法定义为

def loaded(): Boolean = js.native

首先。然后你可以称它为

map.loaded()

如果你真的想让 ThisFunction 显式化,你至少应该使用类型化的:

def loaded: js.ThisFunction0[Map, Boolean] = js.native

然后你可以称它为

map.loaded(map)