2017-06-20 43 views
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科特林?

回答