2
我正在尝试在Kotlin上编写一个小的node.js应用程序来测试和使用javascript interop。从暴露原型'Bar'的外部节点模块'foo',我试图创建一个'Bar'的新实例。从kotlin创建新的节点模块对象
在Javascript中,我只想写类似
var foo = require('foo')
var bar = new foo.Bar()
在科特林,我定义的外部函数“需要”并载入预期其运作模块:
external fun require(module: String): dynamic
...
val foo = require("foo")
//Somehow create a new Bar
现在我会喜欢创建Bar的新实例。到目前为止,我已经尝试过:
- 调用
val bar = foo.Bar()
。这被解释为功能,因此不起作用。 - 定义外部类酒吧和创建新对象
val bar = Bar()
我能找到的唯一解决方法是通过本地JavaScript代码来实例化对象:val bar = js("new foo.Bar()")
。这工作,但有几个缺点:
- 它不是类型安全(这是使用科特林的美的一部分)
- 它具有在编译时间 检查了变量foo的隐式依赖
- 模块纯暴露出配合多套不同的构造函数的参数,这将导致大量的原生代码上面,我想避免
很多这样的对象有什么办法来实现这一目标,prefearably科特林?