Question: I'm struggling to figure out if it's possible in TypeScript to declare a statically typed array of functions.

For example, I can do this:

```
foo: (data:string) => void = function (data) {};

```

But if I want foo to be an array of functions that take a string and return nothing, how do I do that?

```
foo: (data:string) => void [] = [];

```

Doesn't work because TypeScript thinks it's a function that takes a string and returns an array of void, and it doesn't seem to like me trying to wrap the function in brackets.

Any ideas?

**Answer**: Thanks to mohamed below, here's an example that works in the TypeScript Playground:

```
class whatever {
public foo: { (data: string): void; }[] = [];

    dofoo() {
        for (var i=0; i < this.foo.length; i++) {
             this.foo[i]("test");
        }
    }
}

var d = new whatever();

d.foo.push(function(bar){alert(bar)})
d.foo.push(function(bar){alert(bar.length.toString())})

d.dofoo();

```

Answer: 
or `foo: ((data: string) => void)[]`
```
type fn = (...args: any[]) => void

```