una referencia por paso parametros parametro opcionales opcional implementacion funciones funcion duplicada crear como typescript

referencia - Firmas de tipo de TypeScript para funciones con conteos variables de argumentos



parametros por referencia typescript (3)

Tengo problemas para definir interfaces con miembros de funciones que aceptan cantidades variables de argumentos. Tome el siguiente objeto literal como un ejemplo:

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

Me gustaría poder definir una interfaz como:

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

Para que el siguiente código pueda compilarse sin error:

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


Si no se usa el argumento ... args [], Typescript aún crea una matriz en el Javascript y copia los argumentos en ella.

Para evitar esto innecesario, puede hacer un prototipo para la función y la función, así:

function format_n(str: string, ... $n: any[]): string; function format_n(str: string): string { return str.replace(/%(/d+)/g, (_, n) => format_n.arguments[n]); }


Solo para agregar a la respuesta de Chuck, no necesita tener una interfaz definida como tal. Puedes simplemente hacer ... directamente en el método:

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; }

Entonces puedes llamarlo:

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"))