c# - 在 Typescript 中声明委托(delegate)类型

标签 c# types lambda delegates typescript

我有 C# 背景,想创建一个定义函数签名的数据类型。在 C# 中,这是一个声明如下的 delegate:

delegate void Greeter (string message);

public class Foo
{
    public void SayHi (Greeter g) {
        g("Hi!");
    }
}

现在,我想在 Typescript 中实现类似的功能。我知道 Typescript 没有委托(delegate)类型,只有 lambda。我想到了这样的事情:

class Foo {
    SayHi (greeter: (msg: String) => void) {
        greeter('Hi!');
    }
}

虽然这可行,但我想重复使用方法签名 (msg:String) => void 几次,并认为创建自定义类型会更清晰 - 就像 C# 中的委托(delegate)。

知道如何做到这一点吗?

最佳答案

在 TypeScript 中,接口(interface)可以有调用签名。在您的示例中,您可以这样声明它:

interface Greeter {
    (message: string): void;
}

function sayHi(greeter: Greeter) {
    greeter('Hello!');
}

sayHi((msg) => console.log(msg)); // msg is inferred as string

关于c# - 在 Typescript 中声明委托(delegate)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310369/

相关文章:

c# - 索引一小部分值的正确方法

c# - 什么是等效于 SQL "in"语句的 lambda?

c# - 如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

C# 与 C 默认枚举值

c# - 在 C# (Plex Media Server) 中访问/更改视频文件(MKV 等)的元数据

scala - Scala 中的类型参数化对象

haskell - 关联类型族提示 `pred::T a -> Bool` ,其中 "NB: ‘T’ 是一个类型函数,并且可能不是单射的”

python - 简单的二十一点游戏 : deck list becomes NoneType

java - Java 中的伪一流函数?

c# - 使用 new 创建时命名 ValueTuple 属性