Skip to content

Commit

Permalink
Include 'this' type parameter in isRelatedTo fast path (#51230)
Browse files Browse the repository at this point in the history
  • Loading branch information
rbuckton committed Oct 21, 2022
1 parent 3abd351 commit a56b254
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/compiler/checker.ts
Expand Up @@ -36994,7 +36994,7 @@ namespace ts {
}

// primitives with a `{ then() }` won't be unwrapped/adopted.
if (allTypesAssignableToKind(type, TypeFlags.Primitive | TypeFlags.Never)) {
if (allTypesAssignableToKind(getBaseConstraintOrType(type), TypeFlags.Primitive | TypeFlags.Never)) {
return undefined;
}

Expand Down Expand Up @@ -37069,7 +37069,7 @@ namespace ts {
* Determines whether a type is an object with a callable `then` member.
*/
function isThenableType(type: Type): boolean {
if (allTypesAssignableToKind(type, TypeFlags.Primitive | TypeFlags.Never)) {
if (allTypesAssignableToKind(getBaseConstraintOrType(type), TypeFlags.Primitive | TypeFlags.Never)) {
// primitive types cannot be considered "thenable" since they are not objects.
return false;
}
Expand Down
11 changes: 11 additions & 0 deletions tests/baselines/reference/asyncFunctionReturnType.2.js
@@ -0,0 +1,11 @@
//// [asyncFunctionReturnType.2.ts]
// https://github.com/microsoft/TypeScript/issues/47291
class X {
f = async (): Promise<this> => this;
}

//// [asyncFunctionReturnType.2.js]
// https://github.com/microsoft/TypeScript/issues/47291
class X {
f = async () => this;
}
10 changes: 10 additions & 0 deletions tests/baselines/reference/asyncFunctionReturnType.2.symbols
@@ -0,0 +1,10 @@
=== tests/cases/compiler/asyncFunctionReturnType.2.ts ===
// https://github.com/microsoft/TypeScript/issues/47291
class X {
>X : Symbol(X, Decl(asyncFunctionReturnType.2.ts, 0, 0))

f = async (): Promise<this> => this;
>f : Symbol(X.f, Decl(asyncFunctionReturnType.2.ts, 1, 9))
>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, --, --))
>this : Symbol(X, Decl(asyncFunctionReturnType.2.ts, 0, 0))
}
10 changes: 10 additions & 0 deletions tests/baselines/reference/asyncFunctionReturnType.2.types
@@ -0,0 +1,10 @@
=== tests/cases/compiler/asyncFunctionReturnType.2.ts ===
// https://github.com/microsoft/TypeScript/issues/47291
class X {
>X : X

f = async (): Promise<this> => this;
>f : () => Promise<this>
>async (): Promise<this> => this : () => Promise<this>
>this : this
}
6 changes: 6 additions & 0 deletions tests/cases/compiler/asyncFunctionReturnType.2.ts
@@ -0,0 +1,6 @@
// @target: esnext

// https://github.com/microsoft/TypeScript/issues/47291
class X {
f = async (): Promise<this> => this;
}

0 comments on commit a56b254

Please sign in to comment.