如何为具有特定关键字参数的函数添加类型提示?

How do you add type hints for a function with specific keyword arguments?

我想将类型提示添加到输入(也是函数)具有特定关键字参数的高阶函数。

我的代码看起来类似于:

def foo(a: int, b: int) -> int:
    ...


def bar(c: Callable[[int, int], int]) -> int:
    return c(a=1, b=2)  # getting a mypy error: Unexpected keyword argument "a"

在示例中,我希望能够从 bar 的函数范围调用 c,并且我希望能够假设它具有关键字参数 a 并且b.

我明白为什么 mypy 会在这里抱怨,因为一些其他具有不同签名的函数可以作为参数传递给 b,然后 c(a=1, b=2) 将不再起作用。但似乎应该有一种方法可以在类型提示中添加关键字参数名称,以明确保证函数 c 接受名称为 ab.[=20= 的参数]

mypy extension 用于扩展 Callable

from typing import Callable
from mypy_extensions import (Arg, DefaultArg, NamedArg,
                             DefaultNamedArg, VarArg, KwArg)
                             
def foo(a: int, b: int) -> int:
    ...


def bar(c: Callable[[Arg(int, 'a'), Arg(int , 'b')], int]) -> int:
    return c(b=1, a=2)  # no issues