Joren, yes this is an inconsistency. You're not alone in finding it confusing. IMO, the wording in PEP 484 doesn't make this behavior very clear. It's definitely not intuitive. However, the current behavior is well established at this point, and many type stubs and typed code bases rely on the behavior. I don't think it would be feasible to change it or remove it from the type system. I think the original justification for adding this behavior was to support use cases like this one: ``` from typing import TypeVar, Union _T1 = TypeVar("_T1", bytes, str) def add_space_constrained(val: _T1) -> _T1: if isinstance(val, str): return val + " " # No type error else: return val + b" " # No type error _T2 = TypeVar("_T2", bound=Union[bytes, str]) def add_one_bound(val: _T2) -> _T2: if isinstance(val, str): return val + " " # Type error else: return val + b" " # Type error ``` Eric Traut Contributor to Pylance & Pyright Microsoft