如何将JS代码转换为Kotlin而不使用“新”关键字

我正在考虑转换一些基本的JS到Kotlin,但我卡在new关键字。 我不知道如何将下面的JS转换为Kotlin

 var FCM = require('fcm-node'); var fcm = new FCM('YOURSERVERKEYHERE'); var message = { ... }; fcm.send(message, function(err, response){ ... } 

我试过了

 fun sendTestPush() { val FCM = require("fcm-push") val fcm = new FCM("YOURSERVERKEYHERE") val data = Data("Title", "Message") val message = Message("registration_id", data) fcm.send(message) } data class Message(val to: String, val data: Data) data class Data(val title: String, val message: String) 

我得到了编译错误Unresolved reference: new作为Kotlin没有它。 没有“新”我得到预期的错误Attempting to TypeError: Cannot read property 'send' of undefined

任何想法来解决这个问题?

编辑:FCM类是NPM包https://www.npmjs.com/package/fcm-push

对不起,但你标记为正确的答案实际上是不正确的。 我必须告诉你,因为正在寻找正确答案的人会找到它并写出不正确的代码。 一般来说,你不应该直接从Kotlin调用require函数。 相反,你应该使用@JsModuleexternal声明。 在你的具体情况下,会是这样的:

 @JsModule("fcm-push") external class FCM(serverKey: String) { fun send(message: Any?, callback: (err: Any?, response: Any?) -> Unit) fun send(message: Any?): Promise<Any> } val serverKey = "YOURSERVERKEYHERE" val fcm = FCM(serverKey) //... fcm.send(message) 

另外,你应该将commonjs传递给moduleKind编译器标志。 请参阅相应的文档页面以获取完整描

Kotlin中的require函数与您的JS代码中可能使用的NodeJS中的require不一样。

无论你的FCM类是什么,只是实例化它没有new关键字。

感谢来自@Claies的提示,我管理它使用js(...) wrap。~~~

 val FCM = require("fcm-push") val serverKey = "YOURSERVERKEYHERE" val fcm = js("new FCM(serverKey)") ... fcm.send(message) // now works 

我不确定我是否完全满意于在kotlin中写一个字符串纯js,所以我希望有一个更好的方法,我错过了。

编辑:上面的作品,但其不理想,参考接受的答案更好地实施