如何在scala.js中为Object.assign写外观?

时间:2018-03-20 10:50:33

标签: scala.js

我有一个类似于此

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

用意与此类似

var foo = new Foo
foo.bar(myArgument)

我如何围绕这个写一个立面?

2 个答案:

答案 0 :(得分:1)

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
}

如果TypeOfSomeArgument与使用Foo的{​​{1}}不同,您可以简单地将其作为Foo的类型参数:

class Foo[TypeOfSomeArgument] ...

如果您对TypeOfSomeArgument的同一实例Foo随时间变化,那么您就遇到了麻烦。您必须改为使用Any

答案 1 :(得分:0)

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

这似乎相当于呈现的一个。