tipos que programacion objeto llenar especifico eliminar elementos elemento cadenas arreglo array agregar arrays function typescript

arrays - programacion - En TypeScript, ¿cómo declaro una matriz de funciones que aceptan una cadena y devuelven una cadena?



que es un array (2)

ACTUALIZACIÓN : el contexto de esta pregunta fue pre-TypeScript 1.4. Desde esa versión, mi primera suposición ha sido respaldada por el lenguaje. Ver la actualización de la respuesta.

Puedo declarar que f es una función que acepta una cadena y devuelve una cadena:

var f : (string) => string

Y puedo declarar que g es una matriz de cadenas:

var g : string[]

¿Cómo puedo declarar que h es una matriz de "función que acepta una cadena y devuelve una cadena"?

Mi primera suposición:

var h : ((string) => string)[]

Eso parece ser un error de sintaxis. Si elimino los paréntesis adicionales, se trata de una función de cadena a matriz de cadena.


Basado en su investigación, escribí una pequeña clase PlanetGreeter / SayHello: `

/* PlanetGreeter */ class PlanetGreeter { hello : { () : void; } [] = []; planet_1 : string = "World"; planet_2 : string = "Mars"; planet_3 : string = "Venus"; planet_4 : string = "Uranus"; planet_5 : string = "Pluto"; constructor() { this.hello.push( () => { this.greet(this.planet_1); } ); this.hello.push( () => { this.greet(this.planet_2); } ); this.hello.push( () => { this.greet(this.planet_3); } ); this.hello.push( () => { this.greet(this.planet_4); } ); this.hello.push( () => { this.greet(this.planet_5); } ); } greet(a: string): void { alert("Hello " + a); } greetRandomPlanet():void { this.hello [ Math.floor( 5 * Math.random() ) ] (); } } new PlanetGreeter().greetRandomPlanet();


Me lo imaginé. El problema es que el => para un tipo de función literal es en sí mismo meramente azúcar sintáctico y no quiere componer con [] .

Como dice la especificación:

Un tipo de función literal de la forma

(ParamList) => ReturnType

es exactamente equivalente al tipo de objeto literal

{(ParamList): ReturnType}

Entonces, lo que quiero es:

var h : { (s: string): string; }[]

Ejemplo completo:

var f : (string) => string f = x => ''('' + x + '')''; var h : { (s: string): string; }[] h = []; h.push(f);

Actualización :

A juzgar por este conjunto de cambios , se permitirán paréntesis en las declaraciones de tipo en 1.4, por lo que la "primera suposición" en la pregunta también será correcta:

var h: ((string) => string)[]

Actualización adicional ¡ Está en 1.4!