TypedDict давно используется для строгой типизации словарей, где известны ключи и их типы. Но до сих пор у него было два ограничения:
➡️ Нельзя было запретить лишние ключи (любая
TypedDict допускала дополнительные поля).➡️ Нельзя было явно указать тип для дополнительных ключей (например, разрешить только строки).
Новый PEP предлагает решить эти проблемы с помощью двух параметров:
➡️
closed=True — создаёт «закрытый» TypedDict, в котором не может быть лишних полей.➡️
extra_items=... — позволяет указать общий тип для дополнительных ключей.Как это решение поможет:
— Закрытые TypedDict’ы делают возможным более точный вывод типов для
.items() и .values().— Теперь становится безопасным использовать
in для type narrowing.— API-интерфейсы и legacy-код можно описывать гибко: часть ключей фиксированы, остальные — строго заданного типа.
Пример:
class Movie(TypedDict, closed=True):
name: str
director: str
m: Movie = {"name": "Blade Runner", "director": "Ridley Scott"} ✅
m2: Movie = {"name": "Blade Runner", "year": 1982} ❌ Ошибка
А вот пример с extra items:
class MovieBase(TypedDict, extra_items=int):
name: str
movie: MovieBase = {"name": "Blade Runner", "year": 1982} ✅
В итоге разработчики смогут балансировать между строгой типизацией и гибкостью — без костылей вроде
--disable-error-code=typeddict-unknown-key.🔗 Подробнее можно почитать в PEP
🐸 Библиотека питониста
#буст
