Union Type Broadcasting

The biggest problem of this proposal is that at least at runtime it conflicts with existing behavior, specifically because the Union type automatically does type variable expansion if (some of) the inner types are generic.

T = TypeVar('T')

ListOrSet: TypeAlias = list[T] | set[T]
ListOrSetOfInt = ListOrSet[int]

For single type variables, this is mostly fine (i.e. the rule describe in OP would result in the same type), but not always

T = TypeVar('T')

ListGenericOrSetOfStr: TypeAlias = list[T] | set[str]
ListOfIntOrSetOfStr = ListOrSet[int]

If the rule described in OP were to be applied, set[str][int] would be an error.

This would be even worse to the IMO point of impossibility if multiple type variables are involved:

U = TypeVar('U')

DictOrReverseDict = dict[T, U] | dict[U, T]

DictOrReverseDict[str, int] == dict[str, int] | dict[int, str]

According to the rules of OP, this would instead be dict[T, U][str, int] | dict[U, T][str, int], which is dict[str, int] | dict[str, int] - since the type variables are filled in by appearance order.

So not only do I think this isn’t really worth the small amount of typing this saves, it also doesn’t work in a consistent way without introducing a lot of decently complex rules.