Javascript 如何在没有';新';关键词

Javascript 如何在没有';新';关键词,javascript,firebase,kotlin,firebase-cloud-messaging,Javascript,Firebase,Kotlin,Firebase Cloud Messaging,我正在考虑将一些基本的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(

我正在考虑将一些基本的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)
我得到编译错误
未解析引用:new
,因为Kotlin没有它。 如果没有“new”,我将得到预期的错误
尝试键入错误:无法读取未定义的属性“send”

有没有解决这个问题的办法

编辑:FCM类是npm包

与JS代码中可能使用的不同

无论您的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,所以我希望有一种更好的方法我错过了


编辑:上述方法可行,但并不理想,请参考公认的答案以便更好地实施

对不起,您标记为正确的答案实际上是不正确的。我必须这样说,因为寻找正确答案的人可能会找到它并编写错误的代码。通常,您不应该直接从Kotlin调用
require
函数。相反,您应该与
外部
声明一起使用。在您的特殊情况下,可能是这样的:

@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)
@JsModule(“fcm推送”)
外部类FCM(服务器键:字符串){
趣味发送(消息:任意?、回调:(错误:任意?、响应:任意?->Unit)

fun send(message:Any?):承诺提供完整描述。

什么是FCM类?您必须使用
js()
来包装您的JavaScript库。请参阅,抱歉,添加了一个编辑,从这里开始是fcm push npm模块。它只在具有
的NodeJ中工作,并且不知道如何将其放入kotlin@JaredHall我想我误解了这个问题,您仍然希望代码编译成JS,而不是在JVM上“传输”到Kotlin,对吗我认为对我来说最好的学习方法是首先在我的大型nodejs projectLegend中开始将一些较小的类转换为kotlin,感谢这一点。我必须使其成为
外部类FCM(键:String){
接受serverKey in。标记为已接受。我还不确定如何执行代码的回调或承诺部分,但这可能是另一个问题