¿Cómo echo un object JavaScript a un object Kotlin?

Recibí un object JavaScript en respuesta a una request HTTP remota. Tengo un model de kotlin (rasgo) que define los diversos campos que espero sobre el object (los nulos son opcionales).

En primer lugar, quiero hacer una comprobación de is para asegurarme de que mi object es, de hecho, del tipo esperado. Inicialmente probé que la payload is MyModel pero eso no funciona debido a la forma en que el operador es escrito en kotlin.js.

En segundo lugar, quiero MyModel a MyModel para que pueda get autocompletado, etc. en el object mientras trabajo con él. Normalmente, el solo es suficiente, pero como eso no funciona, también necesito algo para este problema.

Me gustaría evitar llenar manualmente mi object desde una dynamic . No me importaría hacer esto tanto si pudiera usar by Delegates.mapVal(...) pero eso requiere un Map<String, Any?> Y no sé cómo get mi dynamic / Any? carga útil en un Map<String, Any?> .

1) No tenemos una verificación de estructura por motivos de performance. No estoy seguro de que necesitemos una solución genérica para esto, pero de todos modos creé un problema al respecto , no dude en votar o destacarlo para get actualizaciones.

2) is suficiente si usa smart cast , como:

 if (payload is MyModel) { // call MyModel members on payload } 

Pero no te olvides de (1) 🙂

3) Puedes escribir algo como:

 class MapDynamic<out V>(val d: dynamic) { public fun get(thisRef: Any, desc: PropertyMetadata): V { return d[desc.name] } } class Foo(data: dynamic) { val field: Int by MapDynamic(data) } fun main(args : Array<String>) { val f = Foo(object { val field = 123 }) println(f.field) } 

Pero parece demasiado detallado, pero puede agregar lógica adicional para, por ejemplo, cuando los datos no tienen campo solicitado. Y si no necesitas una lógica personalizada, creo que el elenco es suficiente.

Para la segunda parte, el reparto, puedes hacer:

 fun responseHandler(payload: dynamic) { val myModel = payload as MyModel } 

o

 fun responseHandler(payload: dynamic) { val myModel: MyModel = payload } 

Esto arrojará un NPE si la carga útil es nula, pero en realidad no validará que la carga corresponda a MyModel. En particular, puede terminar con campos / properties nulos que no deberían ser si la carga útil no tuviera esos campos / properties.

  • Cambiar Observable desde AutoCompleteTextView a EditText
  • CountDownLatch no libera el hilo
  • Especificación Jpa para encontrar un subset del valor del campo
  • ¿Cómo hacer reference al constructor de un Kotlin sellado?
  • OnClickItemListener en spinner en recycler ver android
  • Acceder al valor del parámetro pnetworkingeterminado de una function en Kotlin
  • Seguridad nula en las bibliotecas henetworkingadas de Java utilizadas en los proyectos de Kotlin
  • Obtener files adjuntos de publicaciones de Facebook devolver NullPointerException
  • ¿Cómo usar types personalizados para los parameters de Retrofit @Query?
  • Uso del map RXJava en Kotlin?
  • Android: raspando artículos con jsoup