Skip to content

Commit 91f0194

Browse files
authored
Merge pull request #12743 from Microsoft/fix12737
Fix await for inherited promise
2 parents da4d41f + 8dcbea9 commit 91f0194

File tree

5 files changed

+50
-1
lines changed

5 files changed

+50
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16207,7 +16207,7 @@ namespace ts {
1620716207
return undefined;
1620816208
}
1620916209

16210-
const onfulfilledParameterType = getTypeWithFacts(getUnionType(map(thenSignatures, getTypeOfFirstParameterOfSignature)), TypeFacts.NEUndefined);
16210+
const onfulfilledParameterType = getTypeWithFacts(getUnionType(map(thenSignatures, getTypeOfFirstParameterOfSignature)), TypeFacts.NEUndefinedOrNull);
1621116211
if (isTypeAny(onfulfilledParameterType)) {
1621216212
return undefined;
1621316213
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [awaitInheritedPromise_es2017.ts]
2+
interface A extends Promise<string> {}
3+
declare var a: A;
4+
async function f() {
5+
await a;
6+
}
7+
8+
//// [awaitInheritedPromise_es2017.js]
9+
async function f() {
10+
await a;
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
=== tests/cases/conformance/async/es2017/awaitInheritedPromise_es2017.ts ===
2+
interface A extends Promise<string> {}
3+
>A : Symbol(A, Decl(awaitInheritedPromise_es2017.ts, 0, 0))
4+
>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
5+
6+
declare var a: A;
7+
>a : Symbol(a, Decl(awaitInheritedPromise_es2017.ts, 1, 11))
8+
>A : Symbol(A, Decl(awaitInheritedPromise_es2017.ts, 0, 0))
9+
10+
async function f() {
11+
>f : Symbol(f, Decl(awaitInheritedPromise_es2017.ts, 1, 17))
12+
13+
await a;
14+
>a : Symbol(a, Decl(awaitInheritedPromise_es2017.ts, 1, 11))
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/conformance/async/es2017/awaitInheritedPromise_es2017.ts ===
2+
interface A extends Promise<string> {}
3+
>A : A
4+
>Promise : Promise<T>
5+
6+
declare var a: A;
7+
>a : A
8+
>A : A
9+
10+
async function f() {
11+
>f : () => Promise<void>
12+
13+
await a;
14+
>await a : string
15+
>a : A
16+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// @target: es2017
2+
// @strictNullChecks: true
3+
interface A extends Promise<string> {}
4+
declare var a: A;
5+
async function f() {
6+
await a;
7+
}

0 commit comments

Comments
 (0)