I don't like that @yglukhov... it may also be not a good solution here, because 
having many keys would mean a lot of boilerplate code.

It simply should not be possible normally. But then we are using Nim for a 
reason:
    
    
    # nim js -d:release -d:nodejs --verbosity:0
    
    type Foo = ref object
      a: cstring
      b: int
    
    proc isUndefined*[T](x: T): bool {.importcpp: "((#)==undefined)".}
    
    proc main() =
      var o {.noinit.}: Foo
      {.emit: "var `o` = {};".}
      o.a = "test"
    
    #[ this is Nim not javascript
      if o.b == nil:
        echo "o.b is not is nil"
    ]#
      
      if o.b.isUndefined:
        echo "but then we are Nim and Nim is King"
    
    
    main()
    

I have some more stuff like a `JSAssoc` object in my Nim-Screeps project which 
may be of interest. We used something similar for our PHP backend to interface 
to PHPs associative Arrays. But that is "freeform" again. In Nim-Screeps I try 
to trick everything into fully typed code. Which pretty much works very well 
IMHO.

I also take suggestions of course. I merely hacked that together myself in the 
last weeks (with a little help and some small compiler fixes by @araq).

[https://github.com/oderwat/nim-screeps/blob/master/src/jsext.nim](https://github.com/oderwat/nim-screeps/blob/master/src/jsext.nim)

Reply via email to