从kotlin创建新的节点模块对象

时间:2017-06-20 01:46:19

标签: javascript node.js kotlin

我试图在Kotlin中编写一个小node.js应用程序来测试和使用javascript互操作。来自外部节点模块' foo'它揭示了一个原型' Bar',我正在尝试创建一个新的' Bar'。

在Javascript中我会写一些类似的东西

var foo = require('foo')
var bar = new foo.Bar()

在Kotlin,我定义了一个外部功能'要求'并加载按预期工作的模块:

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()")。这有效,但有一些缺点:

  • 它不是类型安全的(这是使用kotlin之美的一部分)
  • 它对变量foo具有隐式依赖性,在编译时未检查该变量
  • 该模块使用不同的构造函数参数公开许多此类对象,这将产生如上所述的大量本机代码,我希望避免使用

有没有办法实现这一目标,特别是纯粹的kotlin?

1 个答案:

答案 0 :(得分:0)

我想您必须将Bar定义为模块foo中的外部类:

@JsModule("foo")
external class Bar {
   ...
}

请参阅https://kotlinlang.org/docs/reference/js-modules.htmlhttps://kotlinlang.org/docs/reference/js-interop.html