从kotlin创建新的节点模块对象
我正在尝试在Kotlin上编写一个小的node.js应用程序来测试和使用javascript interop。 从暴露原型“Bar”的外部节点模块“foo”,我试图创建一个“Bar”的新实例。
在Javascript中,我会简单地写一些类似的东西
var foo = require('foo') var bar = new foo.Bar()
在Kotlin中,我定义了一个外部函数'require'并加载了按照预期工作的模块:
external fun require(module: String): dynamic ... val foo = require("foo") //Somehow create a new Bar
现在我想创建一个Bar的新实例。 到目前为止我已经尝试过:
- 调用
val bar = foo.Bar()
。 这被解释为功能,因此不起作用。 - 定义一个外部类Bar并创建一个新对象
val bar = Bar()
我能找到的唯一的解决方法是通过本地JavaScript代码实例化对象: val bar = js("new foo.Bar()")
。 这工作,但有一些缺点:
- 它不是类型安全的(这是使用kotlin的美丽的一部分)
- 它在编译时没有被检查的变量foo有一个隐式依赖
- 这个模块暴露了很多这样的对象,它们有不同的构造函数参数集,这会导致很多本地代码,我想避免
有没有什么办法可以达到这个目的呢,纯粹的kotlin呢?
我想你必须将Bar
定义为模块foo
的外部类:
@JsModule("foo") external class Bar { ... }