如何在 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
}
如果 TypeOfSomeArgument
从 Foo
的一种用法到另一种用法,您可以简单地将其作为 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)
}
}
这好像和介绍的一样。
我有一个结构与此类似的库
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
}
如果 TypeOfSomeArgument
从 Foo
的一种用法到另一种用法,您可以简单地将其作为 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)
}
}
这好像和介绍的一样。