2012-10-04 16 views
38

sto lottando per capire se è possibile a macchina di dichiarare una matrice a tipizzazione statica di funzioni.Un Typed gamma di funzioni

Per esempio, posso fare questo:

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

Ma se voglio foo di essere una serie di funzioni che richiedono una stringa e restituiscono nulla, come posso fare questo?

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

non funziona perché dattiloscritto pensa che sia una funzione che prende una stringa e restituisce un array di vuoto, e non sembra come me cercando di avvolgere la funzione tra parentesi.

Qualche idea?

Risposta: Grazie a mohamed di sotto, ecco un esempio che funziona nel dattiloscritto 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(); 
+0

possibile duplicato di [a macchina come faccio a dichiarare una serie di funzioni che accettano una stringa e restituire una stringa?] (Http://stackoverflow.com/questions/12706161/in-typescript-how-do-i-declare -un-array-di-funzioni-che-accept-a-stringa-e-ri) – Fenton

risposta

58

È possibile trovare questo nella language spec punto 3.5.5:

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

I giochi mostra due errori per questo. – asawyer

+0

Sì, sembrava farlo. Grazie. –

+1

@asawyer Deve essere all'interno di una classe o interfaccia, e deve avere una virgola alla fine. –

19

Altro (recenti, più leggibili) modi per digitare una serie di funzioni mediante frecce grassi:

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