是否可以在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());