Вы не можете использовать Union[...]
, псевдоним или другое, как универсальный тип, нет. Ваше объединение содержимое также не является общим, вы не можете указать, какие типы объектов dict
или set
могут содержать, используя dict
или set
напрямую, вы бы использовали Set
или Dict
.
У вас новый союз:
URLorStrSetOrDict = typing.Union[Set[StrOrUrl], Dict[StrOrUrl, Any]]
Обратите внимание, что в словаре есть ключи и значения , вам необходимо предоставить информацию об обоих. Если это используется в качестве входных данных для API, рассмотрите возможность использования более общих и неизменных типов AbstractSet
и Mapping
; это дает понять, что вашему API нужно только прочитать информацию.
Лично я бы усердно занимался рефакторингом кодовой базы, которая настолько грязна из-за того, какие типы объектов она может принимать. Требование, чтобы API принимал только наборы и существующий код должен передавать set(dictionary)
вместо dictionary
, не является трудным требованием, или, возможно, API действительно будет работать с любым повторяемым из StrOrUrl
.