diff --git a/tests/baselines/reference/promiseTypeInferenceUnion.js b/tests/baselines/reference/promiseTypeInferenceUnion.js new file mode 100644 index 0000000000000..b436f3ad8acef --- /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); +} +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 new file mode 100644 index 0000000000000..c5a4fedadc13e --- /dev/null +++ b/tests/baselines/reference/promiseTypeInferenceUnion.symbols @@ -0,0 +1,64 @@ +//// [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, --, --), 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 { +>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 | 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, --, --), 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, --, --), 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, --, --), 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, --, --), 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 new file mode 100644 index 0000000000000..22f3681b82d30 --- /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) : 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 +> : ^^^^^^ +} + +function f2(x: number): number | PromiseLike { +>f2 : (x: number) => number | PromiseLike +> : ^ ^^ ^^^^^ +>x : number +> : ^^^^^^ + + return Promise.resolve(x); +>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 +> : ^^^^^^ +} + +function f3(x: number): number | Promise | PromiseLike { +>f3 : (x: number) => number | Promise | PromiseLike +> : ^ ^^ ^^^^^ +>x : number +> : ^^^^^^ + + return Promise.resolve(x); +>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 +> : ^^^^^^ +} + +const g1: Promise = Promise.resolve(f1(42)); +>g1 : Promise +> : ^^^^^^^^^^^^^^^ +>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 +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>42 : 42 +> : ^^ + +const g2: Promise = Promise.resolve(f2(42)); +>g2 : Promise +> : ^^^^^^^^^^^^^^^ +>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 +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>42 : 42 +> : ^^ + +const g3: Promise = Promise.resolve(f3(42)); +>g3 : Promise +> : ^^^^^^^^^^^^^^^ +>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 +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>42 : 42 +> : ^^ + diff --git a/tests/cases/compiler/promiseTypeInferenceUnion.ts b/tests/cases/compiler/promiseTypeInferenceUnion.ts new file mode 100644 index 0000000000000..7db7aebee4c95 --- /dev/null +++ b/tests/cases/compiler/promiseTypeInferenceUnion.ts @@ -0,0 +1,18 @@ +// @target: esnext +// @lib: esnext + +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