Псевдоним общего типа для NotRequired и необязательногоPython

Программы на Python
Anonymous
Псевдоним общего типа для NotRequired и необязательного

Сообщение Anonymous »

При typing.TypedDict существует разница между полями, которые не являются обязательными, и полями, значения которых объявлены необязательными. Первое означает, что ключ может отсутствовать, второе означает, что значение существующего ключа может быть None.
В моем контексте (работая с mongodb) я не хотите разграничить это и просто разрешить полю быть одновременно необязательным и необязательным. Этого можно достичь с помощью

Код: Выделить всё

class Struct(TypedDict):
possibly_string = NotRequired[str | None]
В моем контексте я никогда не хочу различать это, поэтому мне хотелось бы иметь общий тип, скажем, Возможно[T], который я мог бы использовать в качестве сокращения для написания NotRequired [Т | Нет]..
Когда я пытаюсь написать общий псевдоним, mypy выдает две ошибки, указанные в комментариях к коду:

Код: Выделить всё

from typing import NotRequired, Optional, TypeVar, TypedDict

T = TypeVar("T")

Possibly = NotRequired[Optional[T]]

class Struct(TypedDict):
possibly_string: Possibly[str]  #  Variable "Possibly" is not valid as a type  [valid-type]

non_compliant: Struct = {"possibly_string": int}
compliant_absent: Struct = {}  # Missing key "possibly_string" for TypedDict "Struct"  [typeddict-item]
compliant_none: Struct = {"possibly_string": None}
compliant_present: Struct = {"possibly_string": "a string, indeed"}
Можно ли добиться того, чего я хочу? Если да, то как?
Я ищу решение для Python3.11 или более поздней версии.

Подробнее здесь: https://stackoverflow.com/questions/779 ... d-optional

Вернуться в «Python»