如何在 scala.js 中为 Object.assign 编写门面?

How to write facade for Object.assign in scala.js?

我有一个结构与此类似的库

class Foo {
  bar(someArgument){
    const baz = {"foobarbaz" : someArgument}
    Object.assign(this, baz)
  }
}

预期用途与此类似

var foo = new Foo
foo.bar(myArgument)

我如何围绕这个编写外观?

bar中的JavaScript指令:

const baz = {"foobarbaz" : someArgument};
Object.assign(this, baz);

基本等同于

this.foobarbaz = someArgument;

因此,您只需将 Foo 输入为:

@js.native
@JSGlobal
class Foo extends js.Object {
  def foobarbaz: js.UndefOr[TypeOfSomeArgument] = js.native

  def bar(someArgument: TypeOfSomeArgument): Unit = js.native
}

如果 TypeOfSomeArgumentFoo 的一种用法到另一种用法,您可以简单地将其作为 Foo 的类型参数:

class Foo[TypeOfSomeArgument] ...

如果您随时间改变 Foo 的同一 实例 TypeOfSomeArgument,那么您就有麻烦了。您必须改用 Any

class Foo extends js.Object {
  def bar(someArgume: js.Any): Unit = {
    val baz = js.Dynamic.literal("foobarbaz" -> someArgument)
    js.Object.assign(this, baz)
  }
}

这好像和介绍的一样。