据我所知,你必须在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
时会抛出此错误。在这种情况下,我应该调用关键字或函数吗?
答案 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; ...)