Hi list! I was asked to bring this up here. When PEP604 was first introduced last year I noticed a few under-specified parts, namely how it interacts with ForwardRef and the edge case of `None | None` eg:
from typing import Union Union[int, 'str'] typing.Union[int, ForwardRef('str')] int | 'str' # should this raise an error, or return the same as above? Union[None, "ref1"] typing.Optional[ForwardRef('ref1')] None | "ref1" # should this construct (None first) be forbidden, or does str.__or__ or NoneType.__or__ need to be implemented? Union[None, None] <class 'NoneType'> None | None # should be forbidden? It seems very unlikely to come up in practise even if typing.Union supports it Union["ref1","ref2"] typing.Union[ForwardRef('ref1'), ForwardRef('ref2')] "ref1" | "ref2" # would this be str.__or__ returning types.Union?
In the discussion last year, it was suggested that there could be a `typing.Forward` that could be used instead of the bare string "ref" cases, or even requiring the union to be fully quoted eg `T = "Ref | OtherRef"`.