An object providing, as much as possible, the union of two types
The TypeUnion is intended to allow specifying
baseTypes which are actually 2 or more sub-
types. The TypeUnion is responsible for
mediating between the sub-types (for instance
making sure that items which are instances of
one type are not arbitrarily converted to
instances of another).