Búsqueda de sitios web

intellij idea - ¿Por qué Typescript Awaited convierte el tipo en una función en lugar del tipo desempaquetado en una promesa?


Estoy tratando de obtener el tipo de retorno real de una función que devuelve una promesa. Esto es lo que hice:

const myFunction = async (): Promise<number> => {
  return 123;
}

type R = Awaited<ReturnType<typeof myFunction>>;
const result: R = 123; // TS error: Initializer type number is not assignable to variable type R 

Sin embargo, esto no funciona por razones muy extrañas. Espero que R sea un número. Pero parece que Typescript piensa que el tipo R no es un número sino el siguiente tipo:

(value: number) => (PromiseLike<TResult1> | TResult1) extends ((value: infer V, ...args: infer _) => any) ? Awaited<V> : never

En mi IDE, está mostrando esto:

Esto es desconcertante porque ¿cómo convirtió Awaited el tipo de R en una función de aspecto extraño que no declaré en ningún lugar?

Estoy usando Typescript 5.0.4. ¿Cómo puedo solucionar este problema?

Respuesta #1

Intenta usar este tipo en su lugar Awaited:

type AwaitedFix<T> = T extends PromiseLike<infer U> ? AwaitedFix<U> : T

Eso parece ser un problema con Webstorm al usar algunos paquetes externos en tu proyecto ("@azure/msal-browser": "^2.37.1" en el caso descrito)