A couple of folks in earlier threads were supportive of NotRequired[...] as an alternative (or in addition to) the Required[...] syntax. I've been warming up to that idea. Allowing the use NotRequired[...] would make it possible to succinctly mark a small number of items in an existing TypedDict definition as potentially-missing, which I think may be a more-common case than marking a small number of keys as required. Using NotRequired[...] would also allow folks to avoid using the somewhat cryptic `total=False` syntax and the inverting behavior it implies. Here's an example from one project of mine that makes all "version 1" keys of a JSON structure required but adds potentially-missing keys for all future structure versions: ``` class CodeAssignmentInfo(TypedDict): # v1 id: IntStr title: str subtitle: str assignment_icon_type: AssignmentIconType turned_in_status: TurnedInStatus unlock_status: UnlockStatus # v2 has_teacher_uploaded_video: NotRequired[bool] ``` Notice that I didn't need to use `total=False` and only had to use a single `NotRequired[...]`. By contrast if we only supported `Required[...]`, I'd have to instead write: ``` class CodeAssignmentInfo(TypedDict, total=False): # v1 id: Required[IntStr] title: Required[str] subtitle: Required[str] assignment_icon_type: Required[AssignmentIconType] turned_in_status: Required[TurnedInStatus] unlock_status: Required[UnlockStatus] # v2 has_teacher_uploaded_video: bool ``` Oof. That's a lot of Required[...] wrappers I had to add in order to get just a single potentially-missing item added. So I will pose a few questions directly: 1. How about we support NotRequired[...] in general? 2. How do folks feel about *also* supporting Required[...] for when a total=False TypedDict really is more appropriate? -- David Foster | Seattle, WA, USA Contributor to TypedDict support for mypy