Skip to content

Cannot use Dynamic with native Scala.js class / trait #19528

Closed
@OndrejSpanel

Description

@OndrejSpanel

Compiler version

3.3.1

Minimized code

import scala.language.dynamics
import scala.scalajs.js
import scala.scalajs.js.annotation._

object Main {
  @js.native
  @JSGlobal("MyDynamic")
  class MyDynamic extends js.Any with Dynamic {
    @JSBracketAccess
    def selectDynamic(name: String): js.Any = js.native
    @JSBracketAccess
    def updateDynamic(name: String)(value: js.Any): Unit = js.native
  }

  def main(args: Array[String]): Unit = {
    val d = new MyDynamic
    println(d.one)
    println(d.two)
  }
}

This is Scala.js - complete project available at https://github.com/OndrejSpanel/ScalaJsDynamic

Output

When using run in sbt, I get:

[error] scala.Dynamic (of kind Interface) is not a valid interface implemented by Main$MyDynamic (of kind NativeJSClass)
[error]   called from Main$MyDynamic
[error]   called from Main$.main([java.lang.String)void
[error]   called from static Main.main([java.lang.String)void
[error]   called from core module module initializers
[error] involving instantiated classes:
[error]   Main$

Expectation

The code should run. The same code works fine with Scala 2.13.12

Note

When posted as https://stackoverflow.com/q/77874549/16673, @sjrd advised to report it as a bug.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions