2012-10-04 10 views
38

Ich habe Mühe herauszufinden, ob es in TypeScript möglich ist, ein statisch typisiertes Array von Funktionen zu deklarieren.Ein typisiertes Array von Funktionen

Zum Beispiel, ich kann dies tun:

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

Aber wenn ich foo eine Reihe von Funktionen sein will, die eine Zeichenfolge nehmen und nichts zurückgeben, wie kann ich das tun?

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

funktioniert nicht, da Typoskript denkt, es ist eine Funktion, die einen String und gibt ein Array von Leere, und es scheint nicht zu mögen ich versuchen, die Funktion in Klammern zu wickeln.

Irgendwelche Ideen?

Antwort: Dank mohamed unten, hier ist ein Beispiel, das in dem Typoskript Spielplatz funktioniert:

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(); 
+0

mögliches Duplikat von [In TypeScript wie deklariere ich ein Array von Funktionen, die eine Zeichenkette akzeptieren und eine Zeichenkette zurückgeben?] (Http://stackoverflow.com/questions/12706161/in-typescript-how-do-i-declare -an-array-of-functions-das-akzeptieren-ein-string-und-re) – Fenton

Antwort

58

du im 3.5.5 language spec Abschnitt finden:

foo: { (data: string): void; } [] 
+0

Der Spielplatz zeigt zwei Fehler dafür. – asawyer

+0

Ja, das schien es zu tun. Vielen Dank. –

+1

@asawyer Es muss sich innerhalb einer Klasse oder Schnittstelle befinden und muss am Ende ein Semikolon haben. –

19

Andere (neuere, besser lesbare) Möglichkeiten, ein Array von Funktionen mit Hilfe von Fettpfeilen einzugeben:

let foo: Array<(data: string) => void>; 
let bar: ((data: string) => void)[];