Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions tests/baselines/reference/promiseTypeInferenceUnion.js
Original file line number Diff line number Diff line change
@@ -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 changes: 64 additions & 0 deletions tests/baselines/reference/promiseTypeInferenceUnion.symbols
Original file line number Diff line number Diff line change
@@ -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 changes: 114 additions & 0 deletions tests/baselines/reference/promiseTypeInferenceUnion.types
Original file line number Diff line number Diff line change
@@ -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 changes: 18 additions & 0 deletions tests/cases/compiler/promiseTypeInferenceUnion.ts
Original file line number Diff line number Diff line change
@@ -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));