来自C#背景,我想创建一个定义函数签名的数据类型 . 在C#中,这是 delegate
声明如下:
delegate void Greeter (string message);
public class Foo
{
public void SayHi (Greeter g) {
g("Hi!");
}
}
现在,我想在Typescript中实现类似的功能 . 我知道Typescript没有委托类型,但只有lambdas . 我提出了这样的事情:
class Foo {
SayHi (greeter: (msg: String) => void) {
greeter('Hi!');
}
}
虽然这有效,但我想重复使用方法签名 (msg:String) => void
几次并认为创建自定义类型会更清晰 - 就像C#中的委托一样 .
有什么想法可以做到这一点?
5 回答
在TypeScript中,接口可以具有呼叫签名 . 在您的示例中,您可以将其声明为:
您可以创建像这样的委托:
type MyDelegate = (input: string) => void;
它定义了函数指针的类型名称,就像委托在C#中一样 . 以下示例将其与泛型类型参数结合使用:
可调用表达式的类型定义(这是一个草稿ok,对于人类......不是BNF或任何正式的):
例:
然后你可以:
五年以及许多TS版本后来我发现自己使用更简单的
type
定义来声明函数类型:我现在发布并使用@steelbreeze/delegate;与C#委托相比,它有一些限制,因为它是不可变的,但在其他方面效果很好(并且当被调用时返回所有被调用函数的结果) .
它允许您编写如下代码: