无法在Kotlinjs

时间:2018-03-04 16:05:22

标签: javascript kotlin requirejs

据我所知,你必须在kotlin中声明require()这样:

external fun require(module: String): dynamic

用法

val module = require("module")

但是在使用它时,我遇到了这个奇怪的问题:

var myObject = module.SampleClass();
                      ^
TypeError: Class constructor SampleClass cannot be invoked without 'new'

new之前加上代码会破坏代码。在这种情况下我该怎么办?

Link to the object I tried to create

更新

在查看已编译的javascript文件时,我意识到了一些事情。

我实际编写的代码

val myObject = module.SampleClass()

编译代码

var myObject = module.SampleClass();

有意义的是,当构造函数调用前面实际上没有new时会抛出此错误。在这种情况下,我应该调用关键字或函数吗?

2 个答案:

答案 0 :(得分:0)

显然,有一个js(code: String)功能。正确的方法是使用这样的构造函数调用:

val client = js("new module.SampleClass();")

答案 1 :(得分:0)

定义require函数并不是在Kotlin中使用模块的最佳方法。

查看@JsModule注释和external修饰符。使用这两个,您可以告诉编译器哪个模块require以及该模块的JS API究竟是什么样的。

在您的情况下,您的代码可能如下所示:

// Module.kt
@file:JsModule("module")

package module

external class SomeClass() {}

// Main.kt
import module.SampleClass

fun main(args: Array<String>) {
   val myObject = SampleClass()
}

另请查看https://github.com/kotlin/js-externals以获取外部声明示例和一些有用的链接。

P.S。别忘了将模块类型设置为CommonJS(文件 - &gt;设置 - &gt; ...)