使字典绑定TypeVar接受TypedDict

时间:2019-12-04 05:52:20

标签: python mypy python-typing

我有一个通用函数,该函数可以接收任何字典并返回具有相同结构的字典。

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为什么不被边界接受,我如何使这些类型正常工作?

1 个答案:

答案 0 :(得分:1)

MyPy here中有关于此功能的公开票证。简短的版本是目前;您无法做到,而最好的办法就是将您的类型设置为Mapping[Any, Any]。如果除了dict属性之外,还需要Mapping的更多功能,可以尝试使用Protocol