Как конвертировать JS-код в Kotlin без ключевого слова 'new'

Я изучаю преобразование некоторых базовых 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

Извините, но ваш ответ, который вы отметили как правильный, на самом деле неверен. Я должен сказать это, так как тот, кто ищет правильный ответ, найдет его и напишет неправильный код. Как правило, вы не должны require функцию непосредственно из Kotlin. Скорее, вы должны использовать @JsModule вместе с external объявлениями. В вашем конкретном случае это будет примерно так:

 @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 компилятора moduleKind . См. Соответствующую страницу документации для полного описания.

Функция потребности в Kotlin не такая же, как требование в NodeJS, которое, вероятно, используется в вашем JS-коде.

Независимо от вашего класса FCM, просто создайте его без new ключевого слова.

Благодаря подсказке @Claies мне удалось заставить ее работать с помощью обертки js(...) . ~~~

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

Я не уверен, что полностью доволен написанием чистых js внутри строки в kotlin, поэтому я надеюсь, что есть лучший способ, который я пропустил.

Редактировать: вышеупомянутые работы, но не идеальные, относятся к принятому ответу для лучшей реализации