This is something that popped in my head while I was exploring the
optional predicate. Currently for
any we have the following syntax.
ow(5, ow.any(ow.string, ow.number));
The proposed syntax for
I already spent quite some time trying to get the type detection work correctly, but I just couldn't get it working. An alternative in line with the
any predicate could be
ow(x, ow.optional(ow.string)), but that's much
An alternative syntax for the previous examples could be
ow.any(5, ow.string, ow.number) ow.optional(x, ow.string)
The type definition for
optional is now very easy to do because
x should be either the type of the predicate or
undefined. Using a chained operator like
ow.optional.string on the other hand is very hard to do (might be even impossible).
I also think it would be easier to add more main operators like not. For instance
ow.not(5, ow.string). The only downside is that I think
ow(5, ow.not.string) is more readable. Same goes for
I just wanted to discuss this before we decide to release and make the project opensource. Because it's quite breaking. I would be fine with both approaches. There are benefits and downsides to both. There might be even an other way of dealing with this that I didn't think of so just go ahead and let me know what you guys think.
// @sindresorhus @kevva @vadimdemedes