microsoft / microsoft/TypeScript
Problem returning union of promises in `then` callback
Abierto
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
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- 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