From e4146f08098f78c3e9749fc7dda7585e2d7318df Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:28:13 -0700 Subject: [PATCH 1/3] Add test for type inference of Promise/PromiseLike union bug --- .../promiseTypeInferenceUnion.errors.txt | 36 ++++++ .../reference/promiseTypeInferenceUnion.js | 32 +++++ .../promiseTypeInferenceUnion.symbols | 46 +++++++ .../reference/promiseTypeInferenceUnion.types | 114 ++++++++++++++++++ .../compiler/promiseTypeInferenceUnion.ts | 15 +++ 5 files changed, 243 insertions(+) create mode 100644 tests/baselines/reference/promiseTypeInferenceUnion.errors.txt create mode 100644 tests/baselines/reference/promiseTypeInferenceUnion.js create mode 100644 tests/baselines/reference/promiseTypeInferenceUnion.symbols create mode 100644 tests/baselines/reference/promiseTypeInferenceUnion.types create mode 100644 tests/cases/compiler/promiseTypeInferenceUnion.ts diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.errors.txt b/tests/baselines/reference/promiseTypeInferenceUnion.errors.txt new file mode 100644 index 0000000000000..259d3a60bf54c --- /dev/null +++ b/tests/baselines/reference/promiseTypeInferenceUnion.errors.txt @@ -0,0 +1,36 @@ +promiseTypeInferenceUnion.ts(2,10): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. +promiseTypeInferenceUnion.ts(6,10): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. +promiseTypeInferenceUnion.ts(10,10): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. +promiseTypeInferenceUnion.ts(13,29): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. +promiseTypeInferenceUnion.ts(14,29): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. +promiseTypeInferenceUnion.ts(15,29): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. + + +==== promiseTypeInferenceUnion.ts (6 errors) ==== + function f1(x: number): number | Promise { + return Promise.resolve(x); + ~~~~~~~ +!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. + } + + function f2(x: number): number | PromiseLike { + return Promise.resolve(x); + ~~~~~~~ +!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. + } + + function f3(x: number): number | Promise | PromiseLike { + return Promise.resolve(x); + ~~~~~~~ +!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. + } + + const g1: Promise = Promise.resolve(f1(42)); + ~~~~~~~ +!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. + const g2: Promise = Promise.resolve(f2(42)); + ~~~~~~~ +!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. + const g3: Promise = Promise.resolve(f3(42)); + ~~~~~~~ +!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. \ No newline at end of file diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.js b/tests/baselines/reference/promiseTypeInferenceUnion.js new file mode 100644 index 0000000000000..1df396d83f4b9 --- /dev/null +++ b/tests/baselines/reference/promiseTypeInferenceUnion.js @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/promiseTypeInferenceUnion.ts] //// + +//// [promiseTypeInferenceUnion.ts] +function f1(x: number): number | Promise { + return Promise.resolve(x); +} + +function f2(x: number): number | PromiseLike { + return Promise.resolve(x); +} + +function f3(x: number): number | Promise | PromiseLike { + return Promise.resolve(x); +} + +const g1: Promise = Promise.resolve(f1(42)); +const g2: Promise = Promise.resolve(f2(42)); +const g3: Promise = 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); +} +var g1 = Promise.resolve(f1(42)); +var g2 = Promise.resolve(f2(42)); +var g3 = Promise.resolve(f3(42)); diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.symbols b/tests/baselines/reference/promiseTypeInferenceUnion.symbols new file mode 100644 index 0000000000000..5cc7569fce88b --- /dev/null +++ b/tests/baselines/reference/promiseTypeInferenceUnion.symbols @@ -0,0 +1,46 @@ +//// [tests/cases/compiler/promiseTypeInferenceUnion.ts] //// + +=== promiseTypeInferenceUnion.ts === +function f1(x: number): number | Promise { +>f1 : Symbol(f1, Decl(promiseTypeInferenceUnion.ts, 0, 0)) +>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 0, 12)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) + + return Promise.resolve(x); +>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 0, 12)) +} + +function f2(x: number): number | PromiseLike { +>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); +>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 4, 12)) +} + +function f3(x: number): number | Promise | PromiseLike { +>f3 : Symbol(f3, Decl(promiseTypeInferenceUnion.ts, 6, 1)) +>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 8, 12)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) +>PromiseLike : Symbol(PromiseLike, Decl(lib.es5.d.ts, --, --)) + + return Promise.resolve(x); +>x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 8, 12)) +} + +const g1: Promise = Promise.resolve(f1(42)); +>g1 : Symbol(g1, Decl(promiseTypeInferenceUnion.ts, 12, 5)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) +>f1 : Symbol(f1, Decl(promiseTypeInferenceUnion.ts, 0, 0)) + +const g2: Promise = Promise.resolve(f2(42)); +>g2 : Symbol(g2, Decl(promiseTypeInferenceUnion.ts, 13, 5)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) +>f2 : Symbol(f2, Decl(promiseTypeInferenceUnion.ts, 2, 1)) + +const g3: Promise = Promise.resolve(f3(42)); +>g3 : Symbol(g3, Decl(promiseTypeInferenceUnion.ts, 14, 5)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) +>f3 : Symbol(f3, Decl(promiseTypeInferenceUnion.ts, 6, 1)) + diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.types b/tests/baselines/reference/promiseTypeInferenceUnion.types new file mode 100644 index 0000000000000..a08d97670fffa --- /dev/null +++ b/tests/baselines/reference/promiseTypeInferenceUnion.types @@ -0,0 +1,114 @@ +//// [tests/cases/compiler/promiseTypeInferenceUnion.ts] //// + +=== promiseTypeInferenceUnion.ts === +function f1(x: number): number | Promise { +>f1 : (x: number) => number | Promise +> : ^ ^^ ^^^^^ +>x : number +> : ^^^^^^ + + return Promise.resolve(x); +>Promise.resolve(x) : any +> : ^^^ +>Promise.resolve : any +> : ^^^ +>Promise : any +> : ^^^ +>resolve : any +> : ^^^ +>x : number +> : ^^^^^^ +} + +function f2(x: number): number | PromiseLike { +>f2 : (x: number) => number | PromiseLike +> : ^ ^^ ^^^^^ +>x : number +> : ^^^^^^ + + return Promise.resolve(x); +>Promise.resolve(x) : any +> : ^^^ +>Promise.resolve : any +> : ^^^ +>Promise : any +> : ^^^ +>resolve : any +> : ^^^ +>x : number +> : ^^^^^^ +} + +function f3(x: number): number | Promise | PromiseLike { +>f3 : (x: number) => number | Promise | PromiseLike +> : ^ ^^ ^^^^^ +>x : number +> : ^^^^^^ + + return Promise.resolve(x); +>Promise.resolve(x) : any +> : ^^^ +>Promise.resolve : any +> : ^^^ +>Promise : any +> : ^^^ +>resolve : any +> : ^^^ +>x : number +> : ^^^^^^ +} + +const g1: Promise = Promise.resolve(f1(42)); +>g1 : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve(f1(42)) : any +> : ^^^ +>Promise.resolve : any +> : ^^^ +>Promise : any +> : ^^^ +>resolve : any +> : ^^^ +>f1(42) : number | Promise +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>f1 : (x: number) => number | Promise +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>42 : 42 +> : ^^ + +const g2: Promise = Promise.resolve(f2(42)); +>g2 : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve(f2(42)) : any +> : ^^^ +>Promise.resolve : any +> : ^^^ +>Promise : any +> : ^^^ +>resolve : any +> : ^^^ +>f2(42) : number | PromiseLike +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f2 : (x: number) => number | PromiseLike +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>42 : 42 +> : ^^ + +const g3: Promise = Promise.resolve(f3(42)); +>g3 : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve(f3(42)) : any +> : ^^^ +>Promise.resolve : any +> : ^^^ +>Promise : any +> : ^^^ +>resolve : any +> : ^^^ +>f3(42) : number | Promise | PromiseLike +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f3 : (x: number) => number | Promise | PromiseLike +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>42 : 42 +> : ^^ + diff --git a/tests/cases/compiler/promiseTypeInferenceUnion.ts b/tests/cases/compiler/promiseTypeInferenceUnion.ts new file mode 100644 index 0000000000000..082a7ee56a68c --- /dev/null +++ b/tests/cases/compiler/promiseTypeInferenceUnion.ts @@ -0,0 +1,15 @@ +function f1(x: number): number | Promise { + return Promise.resolve(x); +} + +function f2(x: number): number | PromiseLike { + return Promise.resolve(x); +} + +function f3(x: number): number | Promise | PromiseLike { + return Promise.resolve(x); +} + +const g1: Promise = Promise.resolve(f1(42)); +const g2: Promise = Promise.resolve(f2(42)); +const g3: Promise = Promise.resolve(f3(42)); \ No newline at end of file From 6c7ff150be42e7132a0d6245f885dde96373373d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:29:06 -0700 Subject: [PATCH 2/3] Fix test --- tests/cases/compiler/promiseTypeInferenceUnion.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/cases/compiler/promiseTypeInferenceUnion.ts b/tests/cases/compiler/promiseTypeInferenceUnion.ts index 082a7ee56a68c..7db7aebee4c95 100644 --- a/tests/cases/compiler/promiseTypeInferenceUnion.ts +++ b/tests/cases/compiler/promiseTypeInferenceUnion.ts @@ -1,3 +1,6 @@ +// @target: esnext +// @lib: esnext + function f1(x: number): number | Promise { return Promise.resolve(x); } From 5f3e0eb53ad7ac7ebc7f840f0b9d49adee04735f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:30:12 -0700 Subject: [PATCH 3/3] Actually fix --- .../promiseTypeInferenceUnion.errors.txt | 36 ------- .../reference/promiseTypeInferenceUnion.js | 6 +- .../promiseTypeInferenceUnion.symbols | 28 +++++- .../reference/promiseTypeInferenceUnion.types | 96 +++++++++---------- 4 files changed, 74 insertions(+), 92 deletions(-) delete mode 100644 tests/baselines/reference/promiseTypeInferenceUnion.errors.txt diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.errors.txt b/tests/baselines/reference/promiseTypeInferenceUnion.errors.txt deleted file mode 100644 index 259d3a60bf54c..0000000000000 --- a/tests/baselines/reference/promiseTypeInferenceUnion.errors.txt +++ /dev/null @@ -1,36 +0,0 @@ -promiseTypeInferenceUnion.ts(2,10): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. -promiseTypeInferenceUnion.ts(6,10): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. -promiseTypeInferenceUnion.ts(10,10): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. -promiseTypeInferenceUnion.ts(13,29): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. -promiseTypeInferenceUnion.ts(14,29): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. -promiseTypeInferenceUnion.ts(15,29): error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. - - -==== promiseTypeInferenceUnion.ts (6 errors) ==== - function f1(x: number): number | Promise { - return Promise.resolve(x); - ~~~~~~~ -!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. - } - - function f2(x: number): number | PromiseLike { - return Promise.resolve(x); - ~~~~~~~ -!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. - } - - function f3(x: number): number | Promise | PromiseLike { - return Promise.resolve(x); - ~~~~~~~ -!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. - } - - const g1: Promise = Promise.resolve(f1(42)); - ~~~~~~~ -!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. - const g2: Promise = Promise.resolve(f2(42)); - ~~~~~~~ -!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. - const g3: Promise = Promise.resolve(f3(42)); - ~~~~~~~ -!!! error TS2585: 'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later. \ No newline at end of file diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.js b/tests/baselines/reference/promiseTypeInferenceUnion.js index 1df396d83f4b9..b436f3ad8acef 100644 --- a/tests/baselines/reference/promiseTypeInferenceUnion.js +++ b/tests/baselines/reference/promiseTypeInferenceUnion.js @@ -27,6 +27,6 @@ function f2(x) { function f3(x) { return Promise.resolve(x); } -var g1 = Promise.resolve(f1(42)); -var g2 = Promise.resolve(f2(42)); -var g3 = Promise.resolve(f3(42)); +const g1 = Promise.resolve(f1(42)); +const g2 = Promise.resolve(f2(42)); +const g3 = Promise.resolve(f3(42)); diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.symbols b/tests/baselines/reference/promiseTypeInferenceUnion.symbols index 5cc7569fce88b..c5a4fedadc13e 100644 --- a/tests/baselines/reference/promiseTypeInferenceUnion.symbols +++ b/tests/baselines/reference/promiseTypeInferenceUnion.symbols @@ -4,9 +4,12 @@ function f1(x: number): number | Promise { >f1 : Symbol(f1, Decl(promiseTypeInferenceUnion.ts, 0, 0)) >x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 0, 12)) ->Promise : Symbol(Promise, Decl(lib.es5.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, --, --)) 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)) } @@ -16,31 +19,46 @@ function f2(x: number): number | PromiseLike { >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 | PromiseLike { >f3 : Symbol(f3, Decl(promiseTypeInferenceUnion.ts, 6, 1)) >x : Symbol(x, Decl(promiseTypeInferenceUnion.ts, 8, 12)) ->Promise : Symbol(Promise, Decl(lib.es5.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, --, --)) >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 = Promise.resolve(f1(42)); >g1 : Symbol(g1, Decl(promiseTypeInferenceUnion.ts, 12, 5)) ->Promise : Symbol(Promise, Decl(lib.es5.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, --, --)) +>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 = Promise.resolve(f2(42)); >g2 : Symbol(g2, Decl(promiseTypeInferenceUnion.ts, 13, 5)) ->Promise : Symbol(Promise, Decl(lib.es5.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, --, --)) +>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 = Promise.resolve(f3(42)); >g3 : Symbol(g3, Decl(promiseTypeInferenceUnion.ts, 14, 5)) ->Promise : Symbol(Promise, Decl(lib.es5.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, --, --)) +>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)) diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.types b/tests/baselines/reference/promiseTypeInferenceUnion.types index a08d97670fffa..22f3681b82d30 100644 --- a/tests/baselines/reference/promiseTypeInferenceUnion.types +++ b/tests/baselines/reference/promiseTypeInferenceUnion.types @@ -8,14 +8,14 @@ function f1(x: number): number | Promise { > : ^^^^^^ return Promise.resolve(x); ->Promise.resolve(x) : any -> : ^^^ ->Promise.resolve : any -> : ^^^ ->Promise : any -> : ^^^ ->resolve : any -> : ^^^ +>Promise.resolve(x) : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Promise : PromiseConstructor +> : ^^^^^^^^^^^^^^^^^^ +>resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >x : number > : ^^^^^^ } @@ -27,14 +27,14 @@ function f2(x: number): number | PromiseLike { > : ^^^^^^ return Promise.resolve(x); ->Promise.resolve(x) : any -> : ^^^ ->Promise.resolve : any -> : ^^^ ->Promise : any -> : ^^^ ->resolve : any -> : ^^^ +>Promise.resolve(x) : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Promise : PromiseConstructor +> : ^^^^^^^^^^^^^^^^^^ +>resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >x : number > : ^^^^^^ } @@ -46,14 +46,14 @@ function f3(x: number): number | Promise | PromiseLike { > : ^^^^^^ return Promise.resolve(x); ->Promise.resolve(x) : any -> : ^^^ ->Promise.resolve : any -> : ^^^ ->Promise : any -> : ^^^ ->resolve : any -> : ^^^ +>Promise.resolve(x) : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Promise : PromiseConstructor +> : ^^^^^^^^^^^^^^^^^^ +>resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >x : number > : ^^^^^^ } @@ -61,14 +61,14 @@ function f3(x: number): number | Promise | PromiseLike { const g1: Promise = Promise.resolve(f1(42)); >g1 : Promise > : ^^^^^^^^^^^^^^^ ->Promise.resolve(f1(42)) : any -> : ^^^ ->Promise.resolve : any -> : ^^^ ->Promise : any -> : ^^^ ->resolve : any -> : ^^^ +>Promise.resolve(f1(42)) : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Promise : PromiseConstructor +> : ^^^^^^^^^^^^^^^^^^ +>resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >f1(42) : number | Promise > : ^^^^^^^^^^^^^^^^^^^^^^^^ >f1 : (x: number) => number | Promise @@ -79,14 +79,14 @@ const g1: Promise = Promise.resolve(f1(42)); const g2: Promise = Promise.resolve(f2(42)); >g2 : Promise > : ^^^^^^^^^^^^^^^ ->Promise.resolve(f2(42)) : any -> : ^^^ ->Promise.resolve : any -> : ^^^ ->Promise : any -> : ^^^ ->resolve : any -> : ^^^ +>Promise.resolve(f2(42)) : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Promise : PromiseConstructor +> : ^^^^^^^^^^^^^^^^^^ +>resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >f2(42) : number | PromiseLike > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >f2 : (x: number) => number | PromiseLike @@ -97,14 +97,14 @@ const g2: Promise = Promise.resolve(f2(42)); const g3: Promise = Promise.resolve(f3(42)); >g3 : Promise > : ^^^^^^^^^^^^^^^ ->Promise.resolve(f3(42)) : any -> : ^^^ ->Promise.resolve : any -> : ^^^ ->Promise : any -> : ^^^ ->resolve : any -> : ^^^ +>Promise.resolve(f3(42)) : Promise +> : ^^^^^^^^^^^^^^^ +>Promise.resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>Promise : PromiseConstructor +> : ^^^^^^^^^^^^^^^^^^ +>resolve : { (): Promise; (value: T): Promise>; (value: T_1 | PromiseLike): Promise>; } +> : ^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >f3(42) : number | Promise | PromiseLike > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >f3 : (x: number) => number | Promise | PromiseLike