Код: Выделить всё
import pydantic
def buildTypeAdapter[T](cls: type[T]) -> pydantic.TypeAdapter[T]:
return pydantic.TypeAdapter(cls)
ta1 = buildTypeAdapter(list[str]) # GOOD: pyright sees this as a TypeAdapter[list[str]]
out1 = ta1.validate_python(None) # GOOD: pyright sees this as a list[str]
Код: Выделить всё
type ListOfStrings = list[str]
ta2 = buildTypeAdapter(ListOfStrings)
out2 = ta2.validate_python(None)
Код: Выделить всё
error: Argument of type "ListOfStrings" cannot be assigned to parameter "cls" of type "type[T@buildTypeAdapter]" in function "buildTypeAdapter"
Type "TypeAliasType" is incompatible with type "type[T@buildTypeAdapter]" (reportArgumentType)
Похожая проблема существует с:
Код: Выделить всё
ta3 = buildTypeAdapter(Annotated[list[str], "Testing"])
Код: Выделить всё
error: Argument of type "type[Annotated]" cannot be assigned to parameter "cls" of type "type[T@buildTypeAdapter]" in function "buildTypeAdapter"
Я пробовал что-то вроде:
Код: Выделить всё
def buildTypeAdapter[T](cls: Annotated[T, ...]) -> pydantic.TypeAdapter[T]:
return pydantic.TypeAdapter(cls)
Код: Выделить всё
def buildTypeAdapter[T](cls: TypeAliasType[T]) -> pydantic.TypeAdapter[T]:
return pydantic.TypeAdapter(cls)
(Обратите внимание, что Pydantic используется здесь как готовый и широко известный пример, но вопрос не об этом как таковом. Скорее, основное внимание уделяется предоставлению информации о типах статическим средствам проверки для Python - и в частности для пирайта - которые "достигают" псевдонимов типов и аннотаций, когда описание связи между аргументами и возвратом типы).
Подробнее здесь: https://stackoverflow.com/questions/791 ... n-generics
Мобильная версия