That's a potential workaround as `Required` is pretty self-explanatory indeed. Though, you would expect the same to work in reverse: class MyThing(TypedDict, total=True): req1: int opt1: NotRequired[str] # or whatever we call it req2: float Having support for just the one way around would feel insufficient... 1) How about: Droppable Potential Open 2) I'm actually wondering where the "optionality" here should be indicated. In typescript, this is marked next to the variable and not the type: interface Data { opt?: string; } So should we instead: class MyThing(TypedDict): Optional[opt1]: str # may not exist, but if exists, value is string opt2: Optional[str] # always exists, but may have null value That would maybe allow to re-use `Optional` as it would exist in different context (don't know how confusing that would be). But this probably doesn't fit the design and the parser?