The TypeScript type system offers a basic support for composite types:
* _Union Types_ represent a value that can be one of the several types. They are constructed using a vertical bar (``++|++``) like the following ``++type NumberOrString = number | string++``.
* _Intersection Types_ combine multiple types into one, so that the object of such type will have all the members of all intersection type elements. They are constructed using an ampersand (``++&++``) like the following ``++type SerializablePerson = Person & Serializable++``. Intersection Types are often used to represent mixins.
Duplicating types when defining a union or interaction type makes the code less readable. Moreover duplicated types might be a simple mistake and another type should be used instead.