@@ -117,7 +117,7 @@ def _resolve_type(
117117 _seen : set [Any ] | None = None ,
118118) -> Any :
119119 """
120- Resolve type hints and ForwardRef.
120+ Resolve type hints and ForwardRef. Maintains a cache of resolved types to avoid infinite recursion.
121121 """
122122 if _seen is None :
123123 _seen = set ()
@@ -126,14 +126,12 @@ def _resolve_type(
126126 type_repr = repr (tp )
127127 if type_repr in _seen :
128128 # Return Any for recursive types to break the cycle
129- result = Any
130- return result
129+ return Any
131130
132131 _seen .add (type_repr )
133132
134133 try :
135- result = _resolve_type_impl (tp , type_map , globalns , localns , _seen )
136- return result
134+ return _resolve_type_impl (tp , type_map , globalns , localns , _seen )
137135 finally :
138136 _seen .discard (type_repr )
139137
@@ -301,8 +299,10 @@ def check_typeddict(
301299
302300 if type_map is None and len (get_args (td_type )) > 0 :
303301 base_origin , base_args = _find_generic_typeddict_base (td_cls )
304- if base_origin is not None and len (getattr (base_origin , "__parameters__" , ())) != len (
305- base_args
302+ if (
303+ base_origin is not None
304+ and base_args is not None
305+ and len (getattr (base_origin , "__parameters__" , ())) != len (base_args )
306306 ):
307307 return TypeCheckResult (False , [f"{ path } type parameter count mismatch in generic base" ])
308308
@@ -462,7 +462,7 @@ def _get_typeddict_metadata(
462462 base_origin , base_args = _find_generic_typeddict_base (td_cls )
463463 if base_origin is not None :
464464 tvars = getattr (base_origin , "__parameters__" , ())
465- type_map = dict (zip (tvars , base_args , strict = False ))
465+ type_map = dict (zip (tvars , base_args , strict = False )) # type: ignore[arg-type]
466466
467467 mod = sys .modules .get (base_origin .__module__ )
468468 globalns = vars (mod ) if mod else {}
0 commit comments