This is best explained by example. Consider the following structure:
TypedVariableLink VariableNode "$foo" TypeCoInhNode "SetLink"
Observe that the TypeCoInhNode behaves as if it were a kind-of PredicateNode, in that it will evaluate to true, if the variable is of the indicated type, else it will evaluate to false.
A range of types can be specified by using the TypeSetLink, to form a conjunction. Thus, for example, to force the variable "$foo" to be a SetLink, an UnorderedLink, or any type in between, one could write
TypedVariableLink VariableNode "$foo" TypeSetLink TypeInhNode "UnorderedLink" TypeCoInhNode "SetLink"
The above requires that "$foo" have at least the type UnorderedLink, but nothing derived from SetLink. Recall that SetLink is a special case of UnorderedLink.