Crear un nuevo object de module de nodo de kotlin

Intento escribir una pequeña aplicación node.js en Kotlin para probar y jugar con la interoperabilidad javascript. Desde un module de nodo externo 'foo' que expone un prototipo 'Bar', bash crear una nueva instancia de 'Bar'.

En Javascript, simplemente escribiría algo así como

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

En Kotlin, definí una function externa 'require' y cargué el module que funciona como se esperaba:

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

Ahora me gustaría crear una nueva instancia de Bar. Hasta ahora lo he intentado:

  • Llamando val bar = foo.Bar() . Esto se interpreta como function y, por lo tanto, no funciona.
  • Definir una class externa Bar y crear un nuevo object val bar = Bar()

La única solución que pude encontrar es crear una instancia del object a través del código JavaScript nativo: val bar = js("new foo.Bar()") . Esto funciona, pero tiene algunas desventajas:

  • no es typesafe (que es parte de la belleza de usar kotlin)
  • tiene una dependencia implícita en la variable foo que no se comtesting en time de compilation
  • El module expone muchos de esos objects con diferentes sets de parameters de constructor, lo que daría como resultado un gran número de código nativo como el anterior, que me gustaría evitar.

¿Hay alguna forma de lograr esto, preferiblemente en kotlin puro?

Supongo que debes definir Bar como una class externa del module foo :

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

Consulte https://kotlinlang.org/docs/reference/js-modules.html y https://kotlinlang.org/docs/reference/js-interop.html