Búsqueda de sitios web

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.

Artículos relacionados