是否可以在typescript中定义函数接口?
例如,当我们有

meth (a : {b: B, c: C}) : {b: B, c: C} {...}

我们可以写
interface A {
    b : B;
    c : C;
}
meth (a : A) : A {...}

但是,当我们有
meth (a : (b: B) => C) : (b: B) => C {...}

我们能做一些类似的事情吗,比如定义一个函数类型,这样我们就可以编写
meth (a : A) : A {...}

再一次?

最佳答案

接口支持调用签名。实际上,您使用的语法可以看作是更详细完整语法的简写:

interface A
{
    (b: B) : C
}
function meth (a : A) : A { return a; }

接口语法还具有支持函数的多个重载的优点:
interface A {
    (b: B): D
    (d: D, b: B): C
}
function meth(a: A) : void
{
    a(new B()); // Call overload with one argument
    a(new D(), new B()); // Call overload with two arguments
}

meth((b: B | D, d?: D|B) => new D());

10-02 22:26