迁移到 scala-js 1.1.1 时出现 scala-js“@JSGlobalScope”错误
scala-js "@JSGlobalScope" error when migrating to scala-js 1.1.1
我在 scala-js(0.6.33) 中有一段休闲代码
object Main2 extends App {
val js = for {
jsTest <- JSTest.js1.toOption
} yield jsTest
println(JSTest.js1)
}
import scala.scalajs.js
import scala.scalajs.js.annotation.JSGlobalScope
@js.native
@JSGlobalScope
object JSTest extends js.Object {
def js1: js.UndefOr[JS2] = js.native
}
@js.native
trait JS1 extends js.Object {
def js1: js.UndefOr[JS2] = js.native
}
@js.native
trait JS2 extends js.Object {
def js2: js.UndefOr[Int] = js.native
}
我正在迁移项目以使用 scala-js(1.1.1)
当我在 scala-js(1.1.1) 中编译相同的代码时,出现此错误:-
const value = js1;
^
ReferenceError: js1 is not defined
谁能帮我用 scala-js(1.1.1) 实现同样的功能?
配置:-
scala -> 2.13.3,sbt -> 1.3.13,jvm -> 14
正如 the release notes of Scala.js 1.0.0 所解释的那样,即使尝试读取在全局范围内实际不存在的 @JSGlobalScope
对象的成员也会抛出 ReferenceError
,而 Scala.js 0.6.x 会得到 undefined
.
发行说明的同一部分解释说,如果目的是检查它是否已定义,现在有必要使用 js.typeOf
的显式测试。在您的具体示例中:
object Main2 extends App {
val js = for {
jsTest <- JSTest.js1.toOption
} yield jsTest
println(JSTest.js1)
}
这意味着您不能再像那样无条件地访问 JSTest.js1
。您首先必须使用 js.typeOf
测试确保它存在:
object Main2 extends App {
val safeJS1 =
if (js.typeOf(JSTest.js1) == "undefined") None
else JSTest.js1.toOption
val js = for {
jsTest <- safeJS1
} yield jsTest
println(safeJS1)
}
我在 scala-js(0.6.33) 中有一段休闲代码
object Main2 extends App {
val js = for {
jsTest <- JSTest.js1.toOption
} yield jsTest
println(JSTest.js1)
}
import scala.scalajs.js
import scala.scalajs.js.annotation.JSGlobalScope
@js.native
@JSGlobalScope
object JSTest extends js.Object {
def js1: js.UndefOr[JS2] = js.native
}
@js.native
trait JS1 extends js.Object {
def js1: js.UndefOr[JS2] = js.native
}
@js.native
trait JS2 extends js.Object {
def js2: js.UndefOr[Int] = js.native
}
我正在迁移项目以使用 scala-js(1.1.1)
当我在 scala-js(1.1.1) 中编译相同的代码时,出现此错误:-
const value = js1;
^
ReferenceError: js1 is not defined
谁能帮我用 scala-js(1.1.1) 实现同样的功能?
配置:-
scala -> 2.13.3,sbt -> 1.3.13,jvm -> 14
正如 the release notes of Scala.js 1.0.0 所解释的那样,即使尝试读取在全局范围内实际不存在的 @JSGlobalScope
对象的成员也会抛出 ReferenceError
,而 Scala.js 0.6.x 会得到 undefined
.
发行说明的同一部分解释说,如果目的是检查它是否已定义,现在有必要使用 js.typeOf
的显式测试。在您的具体示例中:
object Main2 extends App {
val js = for {
jsTest <- JSTest.js1.toOption
} yield jsTest
println(JSTest.js1)
}
这意味着您不能再像那样无条件地访问 JSTest.js1
。您首先必须使用 js.typeOf
测试确保它存在:
object Main2 extends App {
val safeJS1 =
if (js.typeOf(JSTest.js1) == "undefined") None
else JSTest.js1.toOption
val js = for {
jsTest <- safeJS1
} yield jsTest
println(safeJS1)
}