Cómo convertir código JS a Kotlin sin la palabra key 'nueva'

Estoy buscando la conversión de algunos JS básicos a Kotlin, pero estoy atrapado en la new palabra key. No estoy seguro de cómo convertir el siguiente JS a Kotlin

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

Lo intenté

 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) 

Obtengo el error de compilation Unresolved reference: new ya que Kotlin no la tiene. Sin el 'nuevo' obtengo el error esperado Attempting to TypeError: Cannot read property 'send' of undefined

Alguna idea para evitar este problema?

Editar: la class FCM es el package npm https://www.npmjs.com/package/fcm-push

Lo sentimos, pero su respuesta que marcó como correcta, de hecho es incorrecta. Tengo que decirlo, ya que alguien que está buscando la respuesta correcta lo encontrará y escribirá un código incorrecto. En general, no debe llamar directamente a la function require de Kotlin. Por el contrario, debe usar @JsModule junto con declaraciones external . En su caso particular, sería algo como esto:

 @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) 

Además, debe pasar commonjs a moduleKind compiler flag. Vea la página de documentation correspondiente para una descripción completa.

La function de requerir en Kotlin no es la misma que la requerida en NodeJS, que probablemente se usa en su código JS.

Cualquiera que sea su class de FCM, solo ejecútelo sin la new palabra key.

Gracias a una pista de @Claies logré que funcionara con el js(...) wrap. ~~~

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

No estoy seguro de estar totalmente feliz con la escritura de js puros dentro de una string en kotlin, así que espero que haya una mejor manera que me he perdido.

Editar: Lo anterior funciona, pero no es lo ideal, consulte la respuesta aceptada para una mejor implementación

  • ¿Hay algún documento sobre modificadores de acceso en Kotlin?
  • Firebase Firestre Android no puede deserializar el object
  • Estudio Android convertido a Kotlin: use @JvmStatic en algunos casos
  • Cómo crear una pantalla de inicio en tornadofx
  • Advertencia de Android Studio Kotlin Compiler
  • Kotlin: ¿Cómo puedo invocar un campo lambda que tiene un tipo genérico de su class?
  • Jacoco con gradle y kotlin no está creando el file jacoco.exec
  • No se puede 'observar en' hilo principal con RxKotlin
  • ¿Cuál es la diferencia entre get y call en Kotlin?
  • Analizando json con API remota rota
  • Una function con tipo de retorno genérico