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

我正在尝试在Kotlin上编写一个小的node.js应用程序来testing和使用javascript interop。 从暴露原型“Bar”的外部节点模块“foo”,我试图创build一个“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 

现在我想创build一个Bar的新实例。 到目前为止我已经尝试过:

  • 调用val bar = foo.Bar() 。 这被解释为function,因此不起作用。
  • 定义一个外部类Bar并创build一个新对象val bar = Bar()

我能find的唯一的解决方法是通过本地JavaScript代码实例化对象: val bar = js("new foo.Bar()") 。 这工作,但有一些缺点:

  • 它不是types安全的(这是使用kotlin的美丽的一部分)
  • 它在编译时没有被检查的variablesfoo有一个隐式依赖
  • 这个模块暴露了很多这样的对象,它们有不同的构造函数参数集,这会导致很多本地代码,我想避免

有没有什么办法可以达到这个目的呢,纯粹的kotlin呢?

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

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

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

Interesting Posts