Рекурсивные типы еще не поддерживаются в mypy . Они определенно включены в план, хотя я не совсем уверен, когда начнутся работы по внедрению. Это должно было начаться в начале этого года, но обязательный рефакторинг фазы семантического анализа (который внес много внутренних изменений, необходимых для чистой поддержки рекурсивных типов), занял больше времени, чем ожидалось, поэтому я не уверен, что новыйСрокиМожет быть, когда-нибудь в следующем полугодии или около того?
Возможный альтернативный подход, который вы могли бы рассмотреть, - это использование TypedDicts , которое позволяет назначать определенные типы определенным клавишам. Это особенно полезно, если вы уже знаете заранее, какова будет структура ваших входных диктов - если вы точно знаете, какие ключи будут иметь ваши ObjectTypes, и какие именно они будут отображаться. Библиотеки, такие как pydantic , также полезны здесь, если вы предпочитаете работать с объектами вместо диктов и предпочитаете не писать кучу проверочной логики.
Прагматично, если ваша структура диктов действительнов свободной форме, возможно, лучше всего пойти с ObjectType = Dict[str, object]
. В конце концов, чтобы точно определить, с каким EntryType вы имеете дело, вам все равно придется добавить несколько проверок экземпляра, чтобы сузить тип. Таким образом, если начинать с object
вместо Union[str, ListType, ObjectType]
будет слегка раздражающим, это может быть не слишком большим наложением в зависимости от того, что вы делаете.