Вы не должны использовать Generic
- вместо этого вы хотите TypeVar
.Мы используем Generic
, чтобы объявить, что некоторый класс должен рассматриваться как универсальный;мы используем TypeVar
для создания переменной типа (которую мы затем можем использовать для создания универсальных классов или функций).
Вы также поменяли местами аргументы в своем вызове check_type
(который также, вероятно, долженbe check_typeddict
).
Собрав все это вместе, работающая версия вашего кода выглядит следующим образом:
from typing import TypeVar, Type, cast
from mypy_extensions import TypedDict
class MyTypedDict(TypedDict):
a: int
b: int
T = TypeVar('T')
def check_typeddict(value: dict, to_type: Type[T]) -> T:
# do some type checking
return cast(T, value)
out = check_typeddict({'a': 5}, MyTypedDict)
reveal_type(out) # Mypy reports 'MyTypedDict'
В этом случае никаких ограничений не требуется.