@@ -4807,7 +4807,7 @@ class ExtraNotRequired(TypedDict):
48074807 self .assertFalse (ExtraNotRequired .__closed__ )
48084808
48094809 @skipIf (TYPING_3_14_0 , "Only supported on <3.14" )
4810- def test_closed_inheritance (self ):
4810+ def test_closed_inheritance_legacy (self ):
48114811 class Base (TypedDict , closed = True ):
48124812 __extra_items__ : ReadOnly [Union [str , None ]]
48134813
@@ -4842,6 +4842,40 @@ class GrandChild(Child, closed=True):
48424842 self .assertEqual (GrandChild .__extra_items__ , str )
48434843 self .assertTrue (GrandChild .__closed__ )
48444844
4845+ def test_closed_inheritance (self ):
4846+ class Base (TypedDict , extra_items = ReadOnly [Union [str , None ]]):
4847+ a : int
4848+
4849+ self .assertEqual (Base .__required_keys__ , frozenset ({"a" }))
4850+ self .assertEqual (Base .__optional_keys__ , frozenset ({}))
4851+ self .assertEqual (Base .__readonly_keys__ , frozenset ({}))
4852+ self .assertEqual (Base .__mutable_keys__ , frozenset ({"a" }))
4853+ self .assertEqual (Base .__annotations__ , {"a" : int })
4854+ self .assertEqual (Base .__extra_items__ , ReadOnly [Union [str , None ]])
4855+ self .assertFalse (Base .__closed__ )
4856+
4857+ class Child (Base , extra_items = int ):
4858+ a : str
4859+
4860+ self .assertEqual (Child .__required_keys__ , frozenset ({'a' }))
4861+ self .assertEqual (Child .__optional_keys__ , frozenset ({}))
4862+ self .assertEqual (Child .__readonly_keys__ , frozenset ({}))
4863+ self .assertEqual (Child .__mutable_keys__ , frozenset ({'a' }))
4864+ self .assertEqual (Child .__annotations__ , {"a" : str })
4865+ self .assertEqual (Child .__extra_items__ , int )
4866+ self .assertFalse (Child .__closed__ )
4867+
4868+ class GrandChild (Child , closed = True ):
4869+ a : float
4870+
4871+ self .assertEqual (GrandChild .__required_keys__ , frozenset ({'a' }))
4872+ self .assertEqual (GrandChild .__optional_keys__ , frozenset ({}))
4873+ self .assertEqual (GrandChild .__readonly_keys__ , frozenset ({}))
4874+ self .assertEqual (GrandChild .__mutable_keys__ , frozenset ({'a' }))
4875+ self .assertEqual (GrandChild .__annotations__ , {"a" : float })
4876+ self .assertEqual (GrandChild .__extra_items__ , Never )
4877+ self .assertTrue (GrandChild .__closed__ )
4878+
48454879 def test_implicit_extra_items (self ):
48464880 class Base (TypedDict ):
48474881 a : int
0 commit comments