Coming from a C# background, I want to create a datatype that defines a function signature. In C#, this is a delegate
declared like this:
delegate void Greeter (string message);
public class Foo
{
public void SayHi (Greeter g) {
g("Hi!");
}
}
Now, I want to achieve similar in Typescript. I know Typescript has no delegate types, but only lambdas. I came up with something like this:
class Foo {
SayHi (greeter: (msg: String) => void) {
greeter('Hi!');
}
}
While this works, I want to reuse the method signature (msg:String) => void
couple of times and think it would be cleaner to create a custom type - like the delegate in C#.
Any ideas how this can be done?
I now publish and use @steelbreeze/delegate; it has a few limitations compared to the C# delegate, in that it's immutable, but otherwise works well (and when called returns results from all the functions called).
It lets you write code such as:
In TypeScript, interfaces can have call signatures. In your example, you could declare it like this:
You can create something like a delegate like this:
type MyDelegate = (input: string) => void;
which defines a type name for a function pointer, just as delegates do in C#. The following example uses it in combination with generic type parameters:
Type definition for a callable expression (this is a draft ok, for humans... not a BNF or anything formal):
Example:
Then you can:
Five years and many, many TS versions later I find myself using a simpler
type
definition for declaring function types: