【发布时间】:2017-06-20 01:46:19
【问题描述】:
我正在尝试在 Kotlin 中编写一个小型 node.js 应用程序来测试和使用 javascript 互操作。从暴露原型“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 中?
【问题讨论】:
标签: javascript node.js kotlin