Strummer matchers usually have several forms:
- a canonical version which takes options, like like
s.array({of: matcher, min :1})
- shorthand helpers like
s.array(matcher)
object is the only exception, because the canonical version is s.object(fields). This means the matcher can never have an other options. It would be a breaking change, but I suggest we should change to s.object({props: ...}), which would allow for things like
s.object({
optional: true, // can be null
allowExtra: true, // don't fail if there's additional properties to the ones below
props: { ... } // list of properties
})
We could still have the top-level shorthand s(someObject) which would delegate to s.object({props: someObject}).
Note: this would remove the need for s.objectOnly.