我有一个通用函数,该函数可以接收任何字典并返回具有相同结构的字典。
from typing import TypeVar
from typing_extensions import TypedDict
DictT = TypeVar("DictT", bound=dict)
def myfunc(d: DictT) -> DictT:
return d
TD = TypedDict("TD", {
"b": int,
})
b: TD = {
"b": 2,
}
myfunc(b)
当我用字典调用它时,它会传递mypy,但是当我使用TypedDict调用该函数时,我会从mypy中得到一个错误
16: error: Value of type variable "DictT" of "myfunc" cannot be "TD"
TD
为什么不被边界接受,我如何使这些类型正常工作?
答案 0 :(得分:1)
MyPy here中有关于此功能的公开票证。简短的版本是目前;您无法做到,而最好的办法就是将您的类型设置为Mapping[Any, Any]
。如果除了dict
属性之外,还需要Mapping
的更多功能,可以尝试使用Protocol
。