Búsqueda de sitios web

javascript - Typescript - "... no es una función o su valor de retorno no es iterable"


Tengo esta función auxiliar:

export function to(promise: Promise<any>) {
  return promise
    .then((data: any) => [null, data])
    .catch((err: Error) => [err, null]);
}

Esta función (en teoría) debería ayudarme a detectar errores mientras uso await en funciones. por ejemplo:

const [err, data] = await to(validate(card));

El problema es que en tiempo de ejecución, obtengo el siguiente error:

to no es una función o su valor de retorno no es iterable

Aunque se espera que la firma de retorno sea Promise<[Error, null]> Promise<[null, Error]>, parece que devuelve (nuevamente, en teoría, porque en realidad falla): Promise<any[] | Error[]>:

¿Qué me estoy perdiendo?

Respuesta #1

Creo que el problema es causado por el duck typing, TypeScript no puede adivinar correctamente el tipo de retorno a partir de las expresiones.

Puedes escribirlo explícito:

function to(promise: Promise<any>): Promise<[Error, any]> {
    return promise
        .then((data: any) => [null, data] as [Error, any])
        .catch((err: Error) => [err, null] as [Error, any]);
}

Artículos relacionados