Создать новый объект узла узла из котлина

Я пытаюсь написать небольшое приложение node.js в Kotlin для тестирования и воспроизведения с помощью javascript-взаимодействия. Из внешнего модуля узла «foo», который предоставляет прототип «Bar», я пытаюсь создать новый экземпляр «Bar».

В Javascript я бы просто написал что-то вроде

var foo = require('foo') var bar = new foo.Bar() 

В Котлин я определил внешнюю функцию «require» и загрузил модуль, который работает так, как ожидалось:

 external fun require(module: String): dynamic ... val foo = require("foo") //Somehow create a new Bar 

Теперь я хотел бы создать новый экземпляр Bar. До сих пор я пробовал:

  • Вызов val bar = foo.Bar() . Это интерпретируется как функция и, следовательно, не работает.
  • Определение внешней val bar = Bar() классов и создание нового объекта val bar = Bar()

Единственным обходным решением, которое я смог найти, является создание объекта через собственный код javascript: val bar = js("new foo.Bar()") . Это работает, но имеет несколько недостатков:

  • он не является типичным (что является частью красоты использования котлина)
  • он имеет неявную зависимость от переменной foo, которая не проверяется во время компиляции
  • Модуль предоставляет множество таких объектов с различными наборами параметров конструктора, что приведет к большому количеству нативного кода, как указано выше, что я бы хотел избежать

Есть ли способ достичь этого, предчувственно в чистом котлин?

Думаю, вам нужно определить Bar как внешний класс из модуля foo :

 @JsModule("foo") external class Bar { ... } 

См. https://kotlinlang.org/docs/reference/js-modules.html и https://kotlinlang.org/docs/reference/js-interop.html.

Intereting Posts
Логика загрузки Endless RecyclerView несовместима на всех устройствах Преобразовать тип с нулевым значением в его тип, не содержащий NULL? Обратные вызовы Android и повторное использование кода Gson не может анализировать данные формата json формата в Kotlin Объявление функциональных литералов с типичными входными параметрами в Котлине UnsatisfiedDependencyException для приложения Spring Boot 2.0.0.M2 с использованием Kotlin Как сгенерировать файл kotlin из обработчика аннотаций? Почему при создании этого проекта появляется ошибка «Нет дескрипторов сборки». Android Espresso – как запустить настройку только один раз для всех тестов groupValues ​​возвращает только последнее появление повторяющегося шаблона Смарт-литье и сравнение внутри Когда выражение после «есть» проверка типа Откуда берутся три тестовых контейнера? Ошибка коплинской капсулы Неожиданная разница типов между эквивалентным Java и кодом потока Kotlin Почему мы не можем отметить видимость класса как «защищенного» в котлин?