how to create JavaScript anonymous object in kotlin? i want to create exactly this object to be passed to nodejs app
var header = {“content-type”:”text/plain” , “content-length” : 50 ...}
how to create JavaScript anonymous object in kotlin? i want to create exactly this object to be passed to nodejs app
var header = {“content-type”:”text/plain” , “content-length” : 50 ...}
Possible solutions:
1) with js
function:
val header = js("({'content-type':'text/plain' , 'content-length' : 50 ...})")
note: the parentheses are mandatory
2) with dynamic
:
val d: dynamic = object{}
d["content-type"] = "text/plain"
d["content-length"] = 50
3) with js
+ dynamic
:
val d = js("({})")
d["content-type"] = "text/plain"
d["content-length"] = 50
4) with native declaration:
native
class Object {
nativeGetter
fun get(prop: String): dynamic = noImpl
nativeSetter
fun set(prop: String, value: dynamic) {}
}
fun main(args : Array<String>) {
var o = Object()
o["content-type"] = "text/plain"
o["content-length"] = 50
}
Here's a helper function to initialize an object with a lambda syntax
inline fun jsObject(init: dynamic.() -> Unit): dynamic {
val o = js("{}")
init(o)
return o
}
Usage:
jsObject {
foo = "bar"
baz = 1
}
Emited javascript code
var o = {};
o.foo = 'bar';
o.baz = 1;
One more possible solution:
object {
val `content-type` = "text/plain"
val `content-length` = 50
}
It seems that it does not work anymore with escaped variable names.
I'm a Kotlin newbie (though not a newbie developer), I slightly extended answer from @bashor to something looks neater for keys which are valid Java identifiers, but still allows ones which aren't. I tested it with Kotlin 1.0.1.
@native("Object")
open class Object {
}
fun jsobject(init: dynamic.() -> Unit): dynamic {
return (Object()).apply(init)
}
header = jsobject {
validJavaIdentifier = 0.2
this["content-type"] = "text/plain"
this["content-length"] = 50
}