Parámetro rest de Typescript en medio de la lista de argumentos
Me gustaría declarar una función cuyo último parámetro siempre sea un callback. Sin embargo, cuando hago:
interface Statement extends events.EventEmitter {
bind(...args, callback?:(err?:Error)=>void) : Statement;
}
Recibo un error
error TS1014: Rest parameter must be last in list
¿Es posible en TypeScript tener un parámetro REST que no sea el último en la lista de argumentos? ¿Existe algún truco que pueda ayudarme a resolver este problema?
Respuesta #1
Aunque un parámetro rest debe ser el último, ahora puedes usar tipos de tupla variádica en TS 4.0:
type VarCallback<T extends any[]> = (...args: [...T, (err?: Error) => void]) => void
VarCallback asegura que el último parámetro de la función sea un tipo de callback (err?: Error) => void.
Por ejemplo, declara un tipo de función con los dos primeros parámetros string y number:
type MyCallback = VarCallback<[string, number]>
// (a1: string, a2: number, a3: (err?: Error | undefined) => void) => void
const myCb: MyCallback = (s, n, cb) => {/* your implementation */ }
// s,n,cb are strongly typed now
Ejemplo de código en vivo
Respuesta #2
Esto no es compatible en TypeScript. Lo mejor que puedes hacer es ...args: any[], o usar solo bibliotecas con un orden de parámetros más sensato.
