假设第三方库正在使用.pyi
存根文件实现类型提示:
# lib/__init__.py
def foo():
return {"a": "bar", "b": 123, "c": 0.987}
# lib/__init__.pyi
from typing import TypedDict
class FooDict(TypedDict):
a: str
b: int
c: float
def foo() -> FooDict: ...
mypy
可以使用它来防止滥用:
# script.py
import lib
res = lib.foo()
print(res["d"])
# script.py:3: error: TypedDict "FooDict" has no key 'd'
现在,假设我想将lib.foo()
的结果传递给另一个函数,并且我想用类型提示来注释该函数。我应该怎么做?
import lib
def my_func(val: ???):
print(val["a"])
my_func(lib.foo())
是否有方法可以检索存根文件中定义的FooDict
和其他自定义类型?
如果在MYPYPATH
环境变量的路径中包含库的存根,则Mypy将在使用库时引用它。
但是,从the mouth of Guido van Rossum himself,最好的解决方案是获得模块开发人员的许可,以将存根文件包含在typeshed中,以便Mypy可以自己知道它们。