microsoft / microsoft/TypeScript

Problem returning union of promises in `then` callback

Abierto
#27,562 1 comentario 4 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Needs Proposal Suggestion
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

TypeScript Version: 3.2.0-dev.20181004

Code

function f(b: boolean, pn: Promise<number>, ps: Promise<string>) {
 return Promise.resolve().then(() => b ? pn : ps);
}

Expected behavior:

No error.

Actual behavior:

Pyramid of doom error message:

src/a.ts:2:35 - error TS2345: Argument of type '() => Promise<string> | Promise<number>' is not assignable to parameter of type '(value: void) => string | PromiseLike<string>'.
  Type 'Promise<string> | Promise<number>' is not assignable to type 'string | PromiseLike<string>'.
    Type 'Promise<number>' is not assignable to type 'string | PromiseLike<string>'.
      Type 'Promise<number>' is not assignable to type 'PromiseLike<string>'.
        Types of property 'then' are incompatible.
          Type '<TResult1 = number, TResult2 = never>(onfulfilled?: ((value: number) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<...>' is not assignable to type '<TResult1 = string, TResult2 = never>(onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => PromiseLike<...>'.
            Types of parameters 'onfulfilled' and 'onfulfilled' are incompatible.
              Types of parameters 'value' and 'value' are incompatible.
                Type 'number' is not assignable to type 'string'.

2     return Promise.resolve().then(() => b ? pn : ps);

Related Issues: #20531

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el reproductor en src/a.ts en la línea 2 y compara el comportamiento con el issue relacionado #20531. Investiga cómo se tipa el callback de Promise.resolve().then para una unión de promesas; se considera terminado cuando el código mostrado compila sin errores y conserva los tipos de resultado de promesa esperados.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.