2012-10-04 14 views
38

Estoy luchando para descubrir si es posible en TypeScript declarar una matriz de funciones con tipado estático.Una serie de funciones escritas a máquina

Por ejemplo, yo puedo hacer esto:

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

Pero si quiero foo a ser un conjunto de funciones que toman una cadena y nada a cambio, ¿cómo puedo hacer eso?

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

no funciona porque mecanografiado piensa que es una función que toma una cadena y devuelve una matriz de vacío, y no parece que me gustaría tratar de englobar la función entre paréntesis.

¿Alguna idea?

respuesta: Gracias a Mohamed a continuación, he aquí un ejemplo que funciona en el texto mecanografiado Zona de juegos:

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

posible duplicado de [En TypeScript ¿cómo declaro una matriz de funciones que aceptan una cadena y devuelven una cadena?] (Http://stackoverflow.com/questions/12706161/in-typescript-how-do-i-declare -an-array-of-functions-that-accept-a-string-and-re) – Fenton

Respuesta

58

Usted puede encontrar esto en la sección 3.5.5 language spec:

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

El patio de recreo muestra dos errores para esto. – asawyer

+0

Sí, eso pareció hacerlo. Gracias. –

+1

@asawyer Tiene que estar dentro de una clase o interfaz, y tiene que tener un punto y coma al final. –

19

Otros (más nuevas, más legibles) formas de escribir una matriz de funciones con flechas gordas:

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