scala-js 1.1.1로 마이그레이션 할 때 scala-js“@JSGlobalScope”오류
Aug 20 2020
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)로 동일한 기능을 달성하도록 도울 수 있습니까?
구성 :-
스칼라 -> 2.13.3, sbt- > 1.3.13, jvm- > 14
답변
2 sjrd Aug 20 2020 at 15:35
으로 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)
}