mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
Add test for type inference of Promise/PromiseLike union bug (#58213)
This commit is contained in:
parent
e75f470be0
commit
21f5f394b9
32
tests/baselines/reference/promiseTypeInferenceUnion.js
Normal file
32
tests/baselines/reference/promiseTypeInferenceUnion.js
Normal file
@ -0,0 +1,32 @@
|
||||
//// [tests/cases/compiler/promiseTypeInferenceUnion.ts] ////
|
||||
|
||||
//// [promiseTypeInferenceUnion.ts]
|
||||
function f1(x: number): number | Promise<number> {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
|
||||
function f2(x: number): number | PromiseLike<number> {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
|
||||
function f3(x: number): number | Promise<number> | PromiseLike<number> {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
|
||||
const g1: Promise<number> = Promise.resolve(f1(42));
|
||||
const g2: Promise<number> = Promise.resolve(f2(42));
|
||||
const g3: Promise<number> = Promise.resolve(f3(42));
|
||||
|
||||
//// [promiseTypeInferenceUnion.js]
|
||||
function f1(x) {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
function f2(x) {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
function f3(x) {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
const g1 = Promise.resolve(f1(42));
|
||||
const g2 = Promise.resolve(f2(42));
|
||||
const g3 = Promise.resolve(f3(42));
|
||||
64
tests/baselines/reference/promiseTypeInferenceUnion.symbols
Normal file
64
tests/baselines/reference/promiseTypeInferenceUnion.symbols
Normal file
@ -0,0 +1,64 @@
|
||||
//// [tests/cases/compiler/promiseTypeInferenceUnion.ts] ////
|
||||
|
||||
=== promiseTypeInferenceUnion.ts ===
|
||||
function f1(x: number): number | Promise<number> {
|
||||
>f1 : Symbol(f1, Decl(promiseTypeInferenceUnion.ts, 0, 0))
|
||||
>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 0, 12))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
|
||||
return Promise.resolve(x);
|
||||
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 0, 12))
|
||||
}
|
||||
|
||||
function f2(x: number): number | PromiseLike<number> {
|
||||
>f2 : Symbol(f2, Decl(promiseTypeInferenceUnion.ts, 2, 1))
|
||||
>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 4, 12))
|
||||
>PromiseLike : Symbol(PromiseLike, Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
return Promise.resolve(x);
|
||||
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 4, 12))
|
||||
}
|
||||
|
||||
function f3(x: number): number | Promise<number> | PromiseLike<number> {
|
||||
>f3 : Symbol(f3, Decl(promiseTypeInferenceUnion.ts, 6, 1))
|
||||
>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 8, 12))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>PromiseLike : Symbol(PromiseLike, Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
return Promise.resolve(x);
|
||||
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 8, 12))
|
||||
}
|
||||
|
||||
const g1: Promise<number> = Promise.resolve(f1(42));
|
||||
>g1 : Symbol(g1, Decl(promiseTypeInferenceUnion.ts, 12, 5))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>f1 : Symbol(f1, Decl(promiseTypeInferenceUnion.ts, 0, 0))
|
||||
|
||||
const g2: Promise<number> = Promise.resolve(f2(42));
|
||||
>g2 : Symbol(g2, Decl(promiseTypeInferenceUnion.ts, 13, 5))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>f2 : Symbol(f2, Decl(promiseTypeInferenceUnion.ts, 2, 1))
|
||||
|
||||
const g3: Promise<number> = Promise.resolve(f3(42));
|
||||
>g3 : Symbol(g3, Decl(promiseTypeInferenceUnion.ts, 14, 5))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
|
||||
>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
|
||||
>f3 : Symbol(f3, Decl(promiseTypeInferenceUnion.ts, 6, 1))
|
||||
|
||||
114
tests/baselines/reference/promiseTypeInferenceUnion.types
Normal file
114
tests/baselines/reference/promiseTypeInferenceUnion.types
Normal file
@ -0,0 +1,114 @@
|
||||
//// [tests/cases/compiler/promiseTypeInferenceUnion.ts] ////
|
||||
|
||||
=== promiseTypeInferenceUnion.ts ===
|
||||
function f1(x: number): number | Promise<number> {
|
||||
>f1 : (x: number) => number | Promise<number>
|
||||
> : ^ ^^ ^^^^^
|
||||
>x : number
|
||||
> : ^^^^^^
|
||||
|
||||
return Promise.resolve(x);
|
||||
>Promise.resolve(x) : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>Promise : PromiseConstructor
|
||||
> : ^^^^^^^^^^^^^^^^^^
|
||||
>resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>x : number
|
||||
> : ^^^^^^
|
||||
}
|
||||
|
||||
function f2(x: number): number | PromiseLike<number> {
|
||||
>f2 : (x: number) => number | PromiseLike<number>
|
||||
> : ^ ^^ ^^^^^
|
||||
>x : number
|
||||
> : ^^^^^^
|
||||
|
||||
return Promise.resolve(x);
|
||||
>Promise.resolve(x) : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>Promise : PromiseConstructor
|
||||
> : ^^^^^^^^^^^^^^^^^^
|
||||
>resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>x : number
|
||||
> : ^^^^^^
|
||||
}
|
||||
|
||||
function f3(x: number): number | Promise<number> | PromiseLike<number> {
|
||||
>f3 : (x: number) => number | Promise<number> | PromiseLike<number>
|
||||
> : ^ ^^ ^^^^^
|
||||
>x : number
|
||||
> : ^^^^^^
|
||||
|
||||
return Promise.resolve(x);
|
||||
>Promise.resolve(x) : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>Promise : PromiseConstructor
|
||||
> : ^^^^^^^^^^^^^^^^^^
|
||||
>resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>x : number
|
||||
> : ^^^^^^
|
||||
}
|
||||
|
||||
const g1: Promise<number> = Promise.resolve(f1(42));
|
||||
>g1 : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve(f1(42)) : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>Promise : PromiseConstructor
|
||||
> : ^^^^^^^^^^^^^^^^^^
|
||||
>resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>f1(42) : number | Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>f1 : (x: number) => number | Promise<number>
|
||||
> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>42 : 42
|
||||
> : ^^
|
||||
|
||||
const g2: Promise<number> = Promise.resolve(f2(42));
|
||||
>g2 : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve(f2(42)) : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>Promise : PromiseConstructor
|
||||
> : ^^^^^^^^^^^^^^^^^^
|
||||
>resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>f2(42) : number | PromiseLike<number>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>f2 : (x: number) => number | PromiseLike<number>
|
||||
> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>42 : 42
|
||||
> : ^^
|
||||
|
||||
const g3: Promise<number> = Promise.resolve(f3(42));
|
||||
>g3 : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve(f3(42)) : Promise<number>
|
||||
> : ^^^^^^^^^^^^^^^
|
||||
>Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>Promise : PromiseConstructor
|
||||
> : ^^^^^^^^^^^^^^^^^^
|
||||
>resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>; }
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>f3(42) : number | Promise<number> | PromiseLike<number>
|
||||
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>f3 : (x: number) => number | Promise<number> | PromiseLike<number>
|
||||
> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>42 : 42
|
||||
> : ^^
|
||||
|
||||
18
tests/cases/compiler/promiseTypeInferenceUnion.ts
Normal file
18
tests/cases/compiler/promiseTypeInferenceUnion.ts
Normal file
@ -0,0 +1,18 @@
|
||||
// @target: esnext
|
||||
// @lib: esnext
|
||||
|
||||
function f1(x: number): number | Promise<number> {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
|
||||
function f2(x: number): number | PromiseLike<number> {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
|
||||
function f3(x: number): number | Promise<number> | PromiseLike<number> {
|
||||
return Promise.resolve(x);
|
||||
}
|
||||
|
||||
const g1: Promise<number> = Promise.resolve(f1(42));
|
||||
const g2: Promise<number> = Promise.resolve(f2(42));
|
||||
const g3: Promise<number> = Promise.resolve(f3(42));
|
||||
Loading…
x
Reference in New Issue
Block a user