2012-10-05 13 views
57

Non riesco a definire le interfacce con i membri di funzione che accettano quantità variabili di argomenti. Prendiamo il seguente letterale oggetto come un esempio:Firme di tipo TypeScript per funzioni con conteggio di argomenti variabili

var obj = { 
    func:() => { 
     for(var i = 0; i < arguments.length; i++) { 
      console.log(arguments[i]); 
     } 
    } 
}; 

mi piacerebbe essere in grado di definire un'interfaccia come ad esempio:

interface IExample { 
    func: (???) => void; 
} 

In modo che il seguente codice può compilare senza errori:

var test = (o: IExample) { 
    o.func("a"); 
    o.func("a", "b"); 
    o.func("a", "b", "c"); 
    ... 
} 

risposta

98

dattiloscritto utilizza la proposta diffusione ECMAScript 6,

http://wiki.ecmascript.org/doku.php?id=harmony:spread

ma aggiunge le annotazioni di tipo quindi questo sarebbe simile,

interface IExample { 
    func(...args: any[]): void; 
} 
+0

Perfetto - per qualche ragione non ero in grado di trovare nulla di ciò nel documento spec. lingua, ma sembra funzionare bene. Grazie. – nxn

+3

@nxn Pagina 50/51 nelle specifiche: RestParameter –

+0

@PulsarBlow Ah, non ero a conoscenza che si chiamassero Rest Parameters. Grazie per avermi fatto sapere dove trovarli nello spec. – nxn

1

solo per aggiungere alla risposta di Chuck, non c'è bisogno di avere un'interfaccia definita come tale. Si può solo fare il ... direttamente nel metodo:

class Header { constructor(public name: string, public value: string) {} } 

getHeaders(...additionalHeaders: Header[]): HttpHeaders { 
    let headers = new HttpHeaders(); 
    headers.append('Content-Type', 'application/json') 

    if (additionalHeaders && additionalHeaders.length) 
     for (var header of additionalHeaders) 
      headers.append(header.name, header.value); 

    return headers; 
} 

Poi si può chiamare:

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken())) 

O

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()), new Header('Something', "Else")) 
Problemi correlati