When trying the js backend, I often need to write objects that get compiled to
js objects.
In javascript, it is frequent to make functions that accept a single object
whose keys are interpreted as named arguments. One can pass a subset of the
valid properties to mean that the rest are to be left default.
In Nim, if I have an object, say
type Foo = object
a, b: cstring
I can initialize only part of its properties, like this
let foo = Foo(a: "hello")
This gets compiled to
var foo = {
a: "hello",
b: null
};
Notice that Nim always adds the `b` key, putting `null` as default. What I need
is a way to obtain
var foo = {
a: "hello"
};
This is for two reasons:
* existing js functions may interpret that `null` as meaningful
* sometimes I have very big objects (think of objects that hold all existing
CSS properties) where only few keys are set at a time, and this may grow the
memory usage significantly
How can one avoid to render missing properties in the js backend (short of
writing an object type for any combination of keys, which is combinatorially
infeasible)?